1.类和对象
类的定义:class 进行类的定义
对象: 通过类实例化 是一个真实的事物
类的命名:通过大驼峰命名法 例:MingZi
定义类有两种方式:
旧式类: class User:
新式类:class User(object):
两种方式都是可以的,都是继承了object这个类,最好是使用新式类。
class User(object):
def __init__(self):
self.name="lisi"
在定义类的属性时,需要重写object中的__init__(self)方法,来初始化属性,在构建对象时就会被触发。
class User(object):
def __init__(self):
print("被触发!")
self.name = "lisi"
if __name__ == '__main__':
print("开始!")
s = User()
print("触发结束!")
2.封装
封装是将方法或属性,封装到一个类或多个类中,需要用时,通过对象的调用对应的方法或是属性。
1.get和set方法
class User(object):
def __init__(self):
self.name = "lisi"
def get(self):
print(self.name)
if __name__ == '__main__':
s = User()
print("调用属性")
print(s.name)
s.get() #调用方法
class User(object):
def __init__(self,name,age):
self.name = name
self.age = age
def get(self):
return "name="+self.name +" "+"age="+str(self.age)+""
def set(self,age1):
self.age = age1
if __name__ == '__main__':
s = User("lisi",20)
print("调用属性")
print(s.name,s.age)
s.age = 19
print(s.get())
2.porperty()
porperty()方法,如果有参数则调用带有参数的带有参数的方法进行赋值,否则,则调用另一方法。
class User(object):
def __init__(self,name,age):
self.name = name
self.age = age
def get(self):
return "name="+self.name +" "+"age="+str(self.age)+""
def set(self,age1):
self.age = age1
show = property(get,set)
if __name__ == '__main__':
s = User("lisi",20)
print("调用属性")
print(s.show)
s.show = 99
print(s.show)
3.通过装饰器@property在get方法上进行装饰
class User(object):
def __init__(self,name,age):
self.name = name
self.age = age
@property
def Username(self):
return "name="+self.name +" "+"age="+str(self.age)+""
@Username.setter
def Username(self,age1):
self.age = age1
# show = property(get,set)
if __name__ == '__main__':
s = User("lisi",20)
print("调用属性")
print(s.Username)
s.Username=199
print(s.Username)
3.继承
类与类之间存在一种继承关系
class UserName(object):
def __init__(self):
self.name = "马云"
self.money = 10000
class son(UserName):
pass
if __name__ == '__main__':
s = son()
print(s.name)
print(s.money)
注意:子类并不能继承父类的所有方法和属性,只能继承父类公开的方法和属性。私有的方法和属性是不能继承的 (私有:在属性或方法命前打 __两个下划线)
class UserName(object):
def __init__(self):
self.__name = "马云" #将父类名字定义为私有
self.money = 10000
class son(UserName):
pass
if __name__ == '__main__':
s = son()
print(s.name)
print(s.money)
子类无法访问
继承是可以实现方法的重写的 :重写方法的时候,方法的名称、参数一定要和父类必须一致
class UserName(object):
def __init__(self):
self.__name = "马云" #将父类名字定义为私有
self.money = 10000
def show(self):
print("我很有钱!!")
class son(UserName):
def show(self):
print("我也很有钱!!")
if __name__ == '__main__':
s = son()
s.show()
重载:函数名称相同,但是函数的参数个数或者类型不同 ,在python中是没有方法的重载,有方法的重写。
python中支持多继承,如果有一个A类分别继承了B类和C类,B和C中都有一个D()方法,那么A会继承那个?
按照继承的顺需来找,先继承那个类就先继承那个类中的方法。
3.1super() 始终指向父类
class UserName(object):
def __init__(self):
self.__name = "马云" #将父类名字定义为私有
self.money = 10000
def show(self):
print("我很有钱!!")
class son(UserName):
def show(self):
print("我也很有钱!!")
super().show()
if __name__ == '__main__':
s = son()
s.show()
4.多态
多态(python中不重要):指的是对象的多种状态,多态是基于继承的基础之上,父类引用指向子 类实例的现象叫做多态
注意:在弱数据类型语言中,因为不用声明数据类型,所以天生就支持多态