对象 = 属性 + 方法
示例:
class Student: #Python中类名首字母大写
age = 18 #属性
grade = "高三"
weight = 60
def study(self): #方法
print("正在学习ing")
def run(self):
print("正在跑步ing")
s1 = Student()
print(s1.age)
s1.study()
输出:
18
正在学习ing
信息隐蔽。
子类自动共享父类之间数据和方法。
示例:
class MyList(list):
pass
list1 = MyList()
print(list1)
list1.append(1)
print(list1)
输出:
[]
[1]
不同对象对同一方法响应不同的行动。
示例:
class A:
def help(self):
print("i am A")
class B:
def help(self):
print("i am B")
a = A()
b = B()
a.help()
b.help()
输出:
i am A
i am B
Python中self相当于C++的this指针。
示例:
class ball:
def setName(self,name):
self.name = name;
def printName(self):
print("i am " + self.name);
b1 = ball()
b1.setName("西瓜")
b1.printName()
输出:
i am 西瓜
_init_(self)
构造方法,实例化一个对象的时候,那么这个方法就会在对象被创建的时候自动调用。
_init_(self,param1,param2.....)
示例:
class ball:
def __init__(self,nameLin = "桃子"): #设置默认参数
self.name = nameLin
def setName(self,name):
self.name = name
def printName(self):
print("i am " + self.name)
b1 = ball("西瓜")
b2 = ball()
b1.printName()
b2.printName()
输出:
i am 西瓜
i am 桃子
在Python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的。实际上是伪私有,__xx
可以通过_类名__xx
调用。
示例:
class ball:
__name = "西瓜"
def getName(self):
return self.__name
b = ball()
print(b.__name) #报错
print(b.getName()) #输出:西瓜
print(b._ball__name) #输出:西瓜
如果子类中定义与父类同名的方法或者属性,则会自动覆盖父类对应的方法或属性。注意子类的_init_(self)
方法会覆盖父类的对应方法。解决办法:调用未绑定的父类方法或者使用super函数。
class DerivedClassName(BaseClassName):
.......
DerivedClassName:子类、派生类
BaseClassName:父类、基类、超类
示例:
class ball:
name = "球"
def getMessage(self):
print("我是圆的")
def getName(self):
print(self.name)
class gua(ball):
name = "西瓜"
c = gua()
c.getMessage()
c.getName()
输出:
我是圆的
西瓜
在子类_init_(self)
方法中,利用下述语句调用:
BaseClassName._init_(self)
不用给定基类名字,在子类_init_(self)
方法中,使用下述语句:
super()._init_()
可以继承多个父类的属性和方法:
class BerivedClassName(Base1,Base2,.....):
..........
横向关系:大鱼和小鱼都在水池里。
class bigFish:
def __init__(self,x):
self.num = x
class smallFish:
def __init__(self,y):
self.num = y
class pool:
def __init__(self,x,y):
self.bigfish = bigFish(x)
self.smallfish = smallFish(y)
def printNum(self):
print("水池里有大鱼%d只,小鱼%d只!"%(self.bigfish.num,self.smallfish.num))
p = pool(1,10)
p.printNum()
输出:
水池里有大鱼1只,小鱼10只!
类相当于房子图纸,类对象则是一个实物模板,实例对象是大家模仿创造的自己的房子。
同一个类中,属性名和方法名相同时,属性名会覆盖方法名。在定义类时,多使用继承和组合机制,并用不同的有意义的词定义属性和方法。
定义:Python严格要求方法需要有实例才能被调用。
如果class是classinfo的子类,返回true。
注意:
1、一个类被认为是其自身的子类
2、classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回true
class A:
pass
class B(A):
pass
print(issubclass(B,A)) #True
检查一个实例对象object是否属于一个类classinfo。
注意:
1、如果第一个参数不是对象,则永远返回False
2、如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常
测试一个对象object是否包含指定属性name。name为字符串格式。
相对于hasattr(object,name)而言,当对象不包含指定属性时,抛出异常或者default参数。
setattr设定对象中指定属性的值,如果指定属性不存在,则新建该属性并赋值。
删除对象中指定的属性,如果属性不存在,则抛出异常。
通过属性来设置属性。
class A:
def __init__(self,value=10):
self.num = value
def getNum(self):
return self.num
def setNum(self,value):
self.num = value
def delNum(self):
del self.num
x = property(getNum,setNum,delNum)
a = A()
print(a.num) #10
print(a.x) #10
a.x = 66
print(a.x) #66
del a.x #删除对象
欢迎指正错误!