class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体
__init__( self [,args...])
方法为构造函数.
__del__( self )
方法为析构函数. 调用 del obj
就可以删除.
使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self, 且为第一个参数.
函数不支持重载! 不然报错信息为 Duplicated signature.
假如你有一个类称为MyClass,它有一个方法是method(arg1, arg2)。当你调用这个对象的方法MyObject.method(arg1, arg2)
的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)
,——这就是self的原理了。
__private_method()
:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self.__private_methods.__str__()
, 是object类的内置函数, 可以覆写. 用于返回str.需要使用self.fun()
来调用.
def fun1(self):
self.fun2();
def fun2(self):
print 'hi'
@staticmethod
def hi():
print 'hhh';
class foo():
def __init__(self):
self._name='tom'
@property
def name(self):
return self._name
x=foo()
print(x.name)
print(x.name()) #这个时候就会报错, 因为已经把name当字段看了, 而它是 not callable的
"""
tom
TypeError: 'str' object is not callable
"""
A.fun()
而非 A().fun
来调用这个方法.在构造函数中通过self.field_1=x; self.field_2=x
来添加普通字段.
py是动态语言, 可以随意声明类中没有声明的成员变量.
在类中直接写field_1=x; field_2=x
来添加静态字段.
可参看例子中的Employee
类.
在类中直接写__field_1=x;__field_2=x
来添加私有字段.
__private_attrs
:
两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs.
__dict__
, 会以dict的形式输出对象的成员变量. 在json.dumps( )
时常用到.
hasattr(obj, name)
判断一个对象有没有指定的属性, 即字段.
class A:
def a(self):
self.name='tom'
ele=A()
print(hasattr(ele,'name'))
ele.a()
print(hasattr(ele,'name'))
"""
False
True
"""
class Employee:
'所有员工的基类'
#静态变量
empCount = 0
def __init__(self, name, salary):
#普通的成员变量
self.name = name
self.salary = salary
#起到静态变量的效果
Employee.empCount += 1
def displayCount(self):
print ("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print ("Name : ", self.name, ", Salary: ", self.salary);
def entry(self):
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print ("Total Employee %d" % Employee.empCount)
if __name__=="__main__":
Employee.__doc__;
emp1 = Employee("Zara", 2000);
emp1.entry();
class Parent: # 定义父类
def myMethod(self):
print '调用父类方法'
class Child(Parent): # 定义子类
def myMethod(self):
print '调用子类方法'
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
从下面的例子中可以看到, Child是Parent的内部类.
class Parent:
def __init__(self):
self.name = "parent"
def getName(self):
print (self.name)
class Child:
def __init__(self):
self.name = "child"
def getName(self):
print (self.name)
if __name__ == "__main__":
p = Parent()
p.getName()
c = p.Child()
c.getName()
"""
parent
child
"""