定义一个类
1 2 3 4
| class Person(object): def eat(self): '''''' def jump(self):
|
类中几种常见方法
__init__方法(类似与java类的构造函数)
del()方法:删除对象时自动调用,在对一个对象引用次数为0才算彻底删除
举个例子
定义一个动物的类
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Animal(object): def __init__(self,name): self.name = name
def walk(self): print('动物会跑')
def __del__(self): print('%s对象被干掉'%(self.name))
|
然后实例化一个猫的对象,并且多次引用
1 2 3
| cat = Animal('波斯猫') cat2 = cat cat3 = cat
|
发现创建了多个cat对象
如果只删除一个,另外两个还存在
魔法方法:Python中的一种特殊方法,它们以双下划线开头和结尾,例如
__init__
、__str__
、__add__
等。这些方法在特定的情况下会被Python解释器自动调用,而不需要我们显式地调用它们。
举个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Car(object): def __init__(self,newColor,newWheelNum): self.color = newColor self.wheelNum = newWheelNum
def __del__(self): print('%s对象被删除'%(self.color))
def __str__(self): return self.color
laosi = Car('红色',4)
print(laosi)
|
定义一个魔法方法
1 2
| def __str__(self): return self.color
|
如果类的属性比较多,可以重写__str__()方法打印属性,方便阅读,无需手动调用,当使用print打印对象的时候,自动调用
1 2 3
| def __str__(self): msg = '%s-%d'%(self.color,self.wheelNum) return msg
|
str()和repr()
_str_()用于将数值转化为人阅读的形式,调用print的时候自动调用
__repr__()用于转化为解释器读取的形式
注:在没有__str__的时候,认为str == repr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import datetime
now = datetime.datetime.now() print(now)
print(type(now))
print(str(now))
print(type(str(now)))
print(repr(now))
print(eval(repr(now)))
|
总结: repr返回的是字符串,一般用来获取对象
obj == eval(repr(obj)) 这个公式是成立的
继承
定义
1 2 3 4 5
| class A(object): attribute1, attribute2 def method1(self): def method2(self): class B(A):
|
如果有两个类,一个父类,一个子类,定义了同名的方法,如果实例化子类对象调用方法的时候先从子类查找
,再一级一级往上查找
初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Person(object): def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex
def eat(self): print('人都需要吃饭')
def speak(self): print('我会汉语')
class Student(Person): def __init__(self,no,name,age,sex): self.no = no super(Student, self).__init__(name,age,sex)
|
访问限制
私有,就是按java中私有属性的来理解
__双下划线后面跟属性名
举个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Person(object): def __init__(self,name,money): self.__name = name self._money = money
def setName(self,value): if len(value) <= 4: self.__name = value else: print('名称的长度不能大于4个字符') def getName(self): return self.__name
def __sayHello(self): print('我的名字是:%s,我有%s存款'%(self.__name,self._money))
def test(self): self.__sayHello()
|
半公开:_单下划线后面跟属性名
公开:直接属性名