【Python】类和对象变量

来源:互联网 发布:中京创意域名交易中心 编辑:程序博客网 时间:2024/04/29 00:58



注意:一个与类变量有相同名字的对象变量会隐藏类变
量!


1. howMany 实际上是属于类而不是对象的方法。这意味着我们或者可以定义类方
法或者可以定义静态方法,这取决于我们是否需要知道我们是那个类的部分。既然我
们不需要这样的信息,就需要将其定义为静态方法。
我们也能用如下的方式来实现。
1 @staticmethod
2 def howMany():

3 '''Prints the current population.'''
4 print('We have {0:d} robots.'.format(Robot.population))
这种方法可以想成是调用显式方法的简便方法,正像这个例子中看到的那样。

>>> help(staticmethod)
Help on class staticmethod in module builtins:


class staticmethod(object)
 |  staticmethod(function) -> method
 |  
 |  Convert a function to be a static method.
 |  
 |  A static method does not receive an implicit first argument.
 |  To declare a static method, use this idiom:
 |  
 |       class C:
 |       def f(arg1, arg2, ...): ...
 |       f = staticmethod(f)
 |  
 |  It can be called either on the class (e.g. C.f()) or on an instance
 |  (e.g. C().f()).  The instance is ignored except for its class.
 |  
 |  Static methods in Python are similar to those found in Java or C++.
 |  For a more advanced concept, see the classmethod builtin.

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。





2. #我们把__init__ 方法定义为取一个参数name(以及普通的参数self)。在

 #这个__init__ 里,我们只是创建一个新的域,也称为name。

#self.name = name会调用对象的setName()方法

注意到__init__ 方法用一个名字来初始化Robot 实例。在该方法中,给population
自增1 来表明又添加了一个robot。也主要到self.name 的值对每个对象而言是不同的,
这也说明了对象变量的本质。
记住,你必须仅用self 来引用同一对象的变量和方法。这叫属性参考。
在这个程序中,也看到了和方法一样在类中使用docstrings。我们可以在运行的
时候使用Robot.__doc__ 来获得类的docstring,用Robot.sayHi.__doc__ 来获得方法的
docstring。


3. 就如同__init__ 方法一样,还有一个特殊的方法__del__,它在对象消逝的时候
被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。在这个
方法里面,我们只是简单地把Person.population 减1。
当对象不再被使用时,__del__ 方法运行,但是很难保证这个方法究竟在什么时
候运行。如果你想要指明它的运行,你就得使用del 语句,就如同我们在以前的例子
中使用的那样。

4. 给C++/Java/C# 程序员的注释:
Python 中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。
只有一个例外:如果你使用的数据成员名称以双下划线前缀比如__privatevar,Python 的名称
管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他
的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python 所要求
的(与双下划线前缀不同)。

5. >>> help(str.format)

        #Help on method_descriptor:


        #format(...)
        #S.format(*args, **kwargs) -> str
    
        #Return a formatted version of S, using substitutions from args and kwargs.

        #The substitutions are identified by braces ('{' and '}').

        #format方法是格式化输出字符串,{}内的格式字段是被替换的对象
        #{}中的数组时替换的为位置,里面的位置0,1表示替换元组的索引位置



0 0
原创粉丝点击