标签: instance-methods

类和实例方法有什么区别?

类方法和实例方法有什么区别?

实例方法是访问器(getter和setter),而类方法几乎是其他所有方法吗?

oop methods objective-c class-method instance-methods

442
推荐指数
8
解决办法
31万
查看次数

从PHP中的实例调用静态方法,以后的弃用?

虽然我理解$this当在静态上下文中调用方法时该变量不可用,但为了帮助将我的应用程序组件彼此解耦,我认为从实例调用静态方法是有意义的.例如:

class MyExample{
    private static $_data = array();
    public static function setData($key, $value){
        self::$_data[$key] = $value;
    }
    // other non-static methods, using self::$_data
}

// to decouple, another class or something has been passed an instance of MyExample
// rather than calling MyExample::setData() explicitly
// however, this data is now accessible by other instances
$example->setData('some', 'data');
Run Code Online (Sandbox Code Playgroud)

是否有计划弃用此类功能,或者我是否愿意期待对此的支持?我一起工作error_reporting(-1)以确保一个非常严格的开发环境,并且目前还没有任何问题(PHP 5.3.6)但是我知道反向变得不受支持; 也就是说,静态调用实例方法.

php static-methods this deprecated instance-methods

21
推荐指数
1
解决办法
1万
查看次数

如何使len()在不同的类实例上使用不同的方法,而不修改类?

有没有办法在len()不修改类的情况下使用实例方法?

我的问题的例子:

>>> class A(object):
...     pass
...
>>> a = A()
>>> a.__len__ = lambda: 2
>>> a.__len__()
2
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'A' has no len()
Run Code Online (Sandbox Code Playgroud)

注意:

  • 不同的实例A__len__附加不同的方法
  • 我不能改变班级 A

python instance-methods

18
推荐指数
4
解决办法
1439
查看次数

Ruby模块并扩展自我

在什么样的情况下代码:

module M
   extend self
   def greet
    puts "hello"
   end

end
Run Code Online (Sandbox Code Playgroud)

使用更有利于说:

module M
   def self.greet
    puts "hello"
   end
end
Run Code Online (Sandbox Code Playgroud)

在顶部,一个是扩展的实例方法,后者只是一个类方法,但在调用任一方法时,你必须使用M.greet,对吧?我很好奇是否有人可以说明何时使用一个代码而不是另一个代码.谢谢!

ruby module class-method instance-methods

15
推荐指数
2
解决办法
3426
查看次数

扩展方法与实例方法与静态类

我对使用方法与C#中的对象进行交互的不同方式有点困惑,特别是以下主要设计差异和后果:

  1. 调用实例方法
  2. 在POCO上使用静态类
  3. 创建扩展方法

例:

public class MyPoint
{
    public double x { get; set; }
    public double y { get; set; }

    public double? DistanceFrom(MyPoint p)
    {
        if (p != null)
        {
            return  Math.Sqrt(Math.Pow(this.x - p.x, 2) + Math.Pow(this.y - p.y, 2));
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只需将方法放在类定义中就可以完成所需的结果,那么为什么POCO与静态辅助类或扩展方法结合起来会更好?

c# extension-methods poco static-classes instance-methods

14
推荐指数
3
解决办法
7314
查看次数

引用带有井号/井号的javascript实例方法

这个问题类似于为什么Ruby文档中的方法前面有一个井号?

我明白了为什么在Ruby中的实例方法与井号进行,有助于区分谈论SomeClass#someMethodSomeObject.someMethod,并允许rdoc工作.我理解PrototypeJS的作者钦佩Ruby(有充分理由),因此他们在文档中使用了散列标记约定.

我的问题是:这是JavaScript开发人员的标准做法还是只是原型开发人员这样做?

问另一种方式,我在评论/文档中引用实例方法是否合适SomeClass#someMethod?或者我的文档是否应该引用``SomeClass.someMethod`?

javascript documentation instance-methods

12
推荐指数
2
解决办法
2940
查看次数

Ruby未绑定方法:是否可以强制绑定到其他类的实例?

我想知道我是否可以强迫这种情况发生

class A
  def bomb ; "bomb" ; end
end

class B ; end

bomb = A.instance_method(:bomb)

b = B.new
bomb.bind(b)
Run Code Online (Sandbox Code Playgroud)

目前它抛出错误TypeError:bind参数必须是A的实例

我发现这对于我可以用这些未绑定的方法做的非常有限,可能性有点限制.在这些情况下(我不仅仅指幂等函数)它会有意义吗?并且执行错误就足够了,如果我将处理A中未在B中复制的变量,我真的很想知道如何强制这个绑定.

ruby instance-methods

12
推荐指数
1
解决办法
2474
查看次数

在Ruby中有任何相关的语法应用程序:class << self ... end

class << self
attr_accessor :n, :totalX, :totalY
end
Run Code Online (Sandbox Code Playgroud)

上面的语法用于定义类实例变量.但是当我考虑语法含义时,它对我没有任何意义,所以我想知道这种类型的语法是否用于任何其他类型的定义.我在这里的困惑是:

class << self
Run Code Online (Sandbox Code Playgroud)

追加运算符通常意味着"向左侧的对象添加右侧的内容".但是在这个块的上下文中,如何将"将此块的内容放入类实例的定义而不是实例"?

出于同样的原因,我很困惑为什么在一个上下文类中,<< self可以定义类实例变量,而在另一个上下文它似乎创建了类变量,例如:

class Point
  # Instance methods go here
  class << self
    # Class methods go here
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby class-method class-variables class-instance-variables instance-methods

11
推荐指数
1
解决办法
1657
查看次数

实例方法中的静态变量

假设我有这个程序:

class Foo {
 public:
    unsigned int bar () {
        static unsigned int counter = 0;
        return counter++;
    }
};

int main ()
{
    Foo a;
    Foo b;
}
Run Code Online (Sandbox Code Playgroud)

(当然这个例子没有任何意义,因为我显然将"counter"声明为私有属性,但它只是为了说明问题).

我想知道C++在这种情况下的行为:bar()方法中的变量"counter"对于每个实例都是一样的吗?

c++ static-variables instance-methods

11
推荐指数
1
解决办法
4911
查看次数

Ruby:我可以在类方法中使用实例方法吗?

我有一个包含这个类方法的类:

def self.get_event_record(row, participant)
  event = Event.where(
      :participant_id   => participant.id,
      :event_type_code  => row[:event_type],
      :event_start_date => self.format_date(row[:event_start_date])
  ).first

  event = Event.new(
      :participant_id   => participant.id,
      :event_type_code  => row[:event_type],
      :event_start_date => self.format_date(row[:event_start_date])
  ) if event.blank?

  event
end
Run Code Online (Sandbox Code Playgroud)

我在同一个类中也有一个实例方法:

def format_date(date)
  parsed_date = date.split('/')

  # if month or day are single digit, make them double digit with a leading zero
  if parsed_date[0].split("").size == 1
    parsed_date[0].insert(0, '0')
  end
  if parsed_date[1].split("").size == 1
    parsed_date[1].insert(0, '0')
  end

  parsed_date[2].insert(0, '20')

  formatted_date = parsed_date.rotate(-1).join("-")
  formatted_date
end
Run Code Online (Sandbox Code Playgroud)

我得到一个'未定义的方法'错误#format_date.( …

ruby ruby-on-rails class-method instance-methods

11
推荐指数
2
解决办法
2万
查看次数