2021-08-02 python 类

在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

导入

跟函数一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值