1. 类与实例
class Person(object):
"""定义一个Person类
Person类具有的属性:性别
Person类具有的功能:说话
"""
sex
='female'
def __init__(self
,name
):
"""构造方法:在创建类实例时,初始化"""
self
.name
=name
self
.__age
=100
def hello(self
,language
):
"""自定义方法"""
result
={'name':self
.name
,'sex':self
.sex
,'language':language
}
return result
def get_age(self
):
return self
.__age
p1
=Person
('sandy')
print('p1: ',p1
)
print(p1
.hello
('普通话'))
print(p1
.get_age
())
print('p1.sex: ',p1
.sex
)
print('p1.name: ',p1
.name
)
运行结果是:
通过关键字class来声明类,class后面跟着类名,类名后面的括号里面跟着该类的父类类中的方法,第一个参数固定是self,它表示实例对象本身,通过self.XXX可以调用实例对象所拥有的的属性和方法通过类名(初始化参数)实例化一个对象,该初始化参数传给类中的构造方法__init__
2. 属性
类属性
在声明类后,就存在于内存中,能够通过类来直接访问
实例属性
只有在实例化后才存在,不能直接通过类来访问,只能通过实例对象访问
私有属性
命名时以两个下划线开头,不能直接通过实例调用,一般通过类的方法来访问
3. 方法
类中的方法第一个参数都是变量self,self表示调用此方法的实例化对象,类中的方法需要实例化后才能调用; 但静态方法和类方法可以通过类直接调用
静态方法@staticmethod
与类相关但又不需要改变类和实例状态的方法,这类方法可以声明为静态方法静态方法不需要访问类里的任何参数,所带的参数都是从外部传入的静态方法使用函数修饰符@staticmethod声明
类方法@classmethod
类方法使用函数修饰符@classmethod声明类方法的第一个参数是表示自身类的cls参数,可以用来调用类的属性,类的方法
class Person(object):
"""定义一个Person类
Person类具有的属性:性别
Person类具有的功能:说话
"""
sex
='female'
def __init__(self
,name
):
"""构造方法:在创建类实例时,初始化"""
self
.name
=name
def hello(self
,language
):
"""自定义方法"""
result
={'name':self
.name
,'sex':self
.sex
,'language':language
}
return language
@
staticmethod
def sing(song
):
print('sing: ',song
)
@
classmethod
def run(cls
,distance
):
print('run: ',distance
,'sex: '+cls
.sex
)
Person
.sing
("ABCDEFG")
Person
.run
('400')
p
=Person
('Andy')
p
.sing
('HIJKLMN...')
p
.run
('7000')
特殊方法
new:作用在构造方法创建实例之前 init:构造方法,作用于创建实例之时 str:作用于输出实例对象时 del:作用于销毁实例对象时
class Person(object):
"""定义一个Person类
"""
def __init__(self
,name
):
self
.name
=name
print('__init__ function call')
def __new__(cls
, *args
, **kwargs
):
print('__new__ function call')
return super(Person
,cls
).__new__
(cls
)
def __str__(self
):
print('__str__ function call')
return self
.name
def __del__(self
):
print('__del__ function call')
print('*'*30)
p
=Person
('lin')
print('*'*30)
print(p
)
print('*'*30)
del p
运行结果是:
4. 继承
子类可以直接使用父类中定义的属性和方法子类的方法如果和父类的方法重名,子类会覆盖掉父类一般子类的构造方法都是先继承然后扩展,构造方法的继承格式是super(子类,self).__init__(参数1,参数2...)
class Person(object):
"""定义父类Person"""
sex
='female'
def __init__(self
,name
):
"""父类的构造方法"""
self
.name
=name
def hello(self
):
print('name: '+self
.name
)
class Chinese(Person
):
"""定义子类Chinese"""
def __init__(self
,name
,color
):
"""子类的构造方法:"""
super(Chinese
,self
).__init__
(name
)
self
.color
=color
def hello(self
):
"""复写子类中的方法"""
print('I am Chinese,my name is【{name}】,my color is【{color}】'.format(name
=self
.name
,color
=self
.color
))
p1
=Chinese
('lin','yellow')
print(p1
.sex
)
p1
.hello
()
运行结果是: