类
在python里面首字母大写的是类,怪不得用下划线分隔,不用驼峰命名法(。
属性
类属性
跟平时一样写的 是类属性
跟我们平时说的静态属性很像
类属性能被类的对象读和改,实例对象只能读 不能改
下面定义的构造函数是实例函数,所以不能访问类属性count
实例属性
self是指向实例自己的引用
通过构造函数直接添加的是实例属性
实例属性只能通过实例对象来访问和修改,类对象无法访问修改
实例的所有函数都能访问到实例属性
实例属性默认都是公有的,私有属性命名:_attribute
class Cat():
#跟平时一样写的 是类属性
#跟我们平时说的静态属性很像
#类属性能被类的对象读和改,实例对象只能读 不能改
#下面定义的构造函数是实例函数,所以不能访问类属性count
count=0
def __init__(self,name,age):
#self是指向实例自己的引用
#通过构造函数直接添加的是实例属性
#实例属性只能通过实例对象来访问和修改,类对象无法访问修改
#实例的所有函数都能访问到实例属性
self.name=name#公有属性
self._age=age#私有属性
my_cat=Cat("mimi",3)
my_cat.show_cat()
print(my_cat.count)
print(my_cat.age)#出错:AttributeError: 'Cat' object has no attribute 'age'
构造函数
跟其他语言一样,每次创建新实例都要运行一次函数
class Cat():
def __init__(self,name,age):
#self是指向实例自己的引用
self.name=name
self.age=age
实例函数
实例函数定义的时候,要用or改实例属性的话都要放一个self,如果不用的话就不用放。self 表示对实例的自己的引用,把实例放到函数里面,表示被哪个对象用,调用哪个类的数据。
但是这个函数只能被对象用,不能被其他人用,会出错的。
class Cat():
def show_cat(self):
print("cat name:"+self.name+" age:"+str(self.age))
小练习 黄书p147
class Restaurant():
def __init__(self,name,type):
self.name=name
self.type=type
self.number_served=0
def describe_restaurant(self):
print("name:"+self.name+" type:"+self.type+" severed:"+str(self.number_served))
def open_restaurant(self):
print("the restaurant is opening")
def set_number_served(self,number):
self.number_served=number
def increment_number_served(self,number):
self.number_served+=number
my_re=Restaurant("Never","Chinese")
my_re.describe_restaurant()
my_re.open_restaurant()
my_re.set_number_served(300)
my_re.describe_restaurant()
my_re.increment_number_served(100)
my_re.describe_restaurant()
继承
直接把父类放进子类的括号里面,还挺可爱 的。
class Chinese_Restaurant(Restaurant):
构造函数
调用父类构造函数,跟java差不多,也是super
class Chinese_Restaurant(Restaurant):
def __init__(self,name,type):
super().__init__(self,name,type)
重写父类
直接写同名函数就ok!! 只要是同名就覆盖,不需要函数头相同
class Restaurant():
def __init__(self,name,type):
self.name=name
self.type=type
self.number_served=0
def open_restaurant(self):
print("the restaurant is opening!!!!!")
class Chinese_Restaurant(Restaurant):
def __init__(self,name,type):
super().__init__(self,name,type)
def open_restaurant():
print("the restaurant is opening")
C=Chinese_Restaurant.open_restaurant("tree") #TypeError: open_restaurant() takes 0 positional arguments but 1 was given
导入
跟函数一样的