大家周末好,今天是周六北京时间07:50达到实验室,刚刚复习完昨天的内容,今天感冒有所好转,下午课题组有聚餐还是开心的,但今天的学习内容也不要落下。
————08:24————开始学习————
1.访问类属性
语法结构:print(Student.native_place) #访问类属性
class Student:native_place='吉林'#方法def __init__(self,name,age):self.name=nameself.age=agedef eat(self):print('学生在吃饭')
def drink():print('喝水')@staticmethoddef method():print('我使用了statticmethod进行修饰,所以我是静态方法')@classmethoddef cm(cls):print('我是类方法,因为我使用了classmethod进行修饰')
stu1=Student('张三',20)
stu1.eat()
print(stu1.name)
print(stu1.age)
Student.eat(stu1)
stu1=Student('张三',20)
stu2=Student('李四',30)
print(stu1.native_place)
print(stu2.native_place)
Student.native_place='天津'
print(stu1.native_place)
print(stu2.native_place)
解释一下红色部分结果为什么可以更改,因为stu1里和stu2里Student类的对象都有一个类指针,分别指向Student中类对象(native_place='吉林‘) 所以当吉林更改为天津的时候,这二者的访问类属性的时候都是天津。因为这个值是被他俩共享的。
1.1 静态方法的使用方式
类属性:类中方法之外的变量,被该类的所有对象所共享
类方法:使用@classmethod修饰的方法,使用类名直接访问的方法
静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法
结构:Student.method()
类名+.+method()
1.2类方法的使用方式
语法结构:类名+.+cm()
Student.cm()
类方法和静态方法程序如图所示
都是直接调用类名+.+这些方法
1.3 动态绑定属性和方法
class Student:def __init__(self,name,age):self.name=name 将局部变量的name赋给实例变量self.nameself.age=agedef eat(self):print(self.name+'在吃饭')
stu1=Student('张三',20)
stu2=Student('李四',30)
Student实例对象有stu1和stu2,这两个实例对象里面都有指针指向类对象Student 一个Student类可以创建N多个实例对象,每个实例对象的属性值不同。
但是我想让stu1再多增加一个属性怎么做? 这时就用到了动态绑定属性方法。
stu1=Student('张三',20) stu2=Student('李四',30) stu2.gender='女' 你想要在该实例下多绑定的一个属性,用实例对象名+.+自定义的名字=所属类型 print(stu1.name,stu1.age) print(stu2.name,stu2.age,stu2.gender) 直接写上就行了
你这个里面多增加的gender属性,只能被stu2使用,stu1使用不了,那么什么样的属性是大家共有的呢?在init初始化那里所传入参数。
那么也就是在init那里的量是所共有的。
1.3.2 动态绑定方法2
def show():print('定义在类之外的,称函数') stu1.show=show() stu1.show()
stu2.show() 这样就会报错,因为没有绑定stu2,只绑定了stu1
总结:类属性、类方法、静态方法都是使用类名+.使用的
而实例方法是使用对象名+.使用的
2.面向对象的三大特征:
2.1. 封装
class Car:def __init__(self,brand): #brand就是一个实例属性self.brand=branddef start():print('汽车已启动') #下面的这些程序都被包裹在里面了
在程序的左面有一个 减号 一点击就会被包裹起来成图片中所示
2.2.2简单例子
这里我来举例一下,顺便再对类对象进行一个复习和巩固
class Car: #定义了一个名字叫做Card的类对象def __init__(self,brand): 初始化设置一个参数 brandself.brand=brand 局部变量赋给self.branddef start(self): 类方法print('汽车已启动')car=Car('梅赛德斯奔驰') 例子:将类对象给了实例对象car Car这个类里面的那个值是上面的 参数值 为brand car.start() 让实例对象调用上述中的方法 start() print(car.brand) 把里面的参数打印出来。同时也是实例对象在调用类Car里面的参数值
如果在类里面定义的参数,不想在外面显示出来的话,要在该参数前面加两个__
class Student:def __init__(self,name,age):self.name=nameself.__age=age 变成私有属性def show(self):print(self.name,self.__age) 内部方法可以访问私有属性 要记得统一
可以知道外部访问是不允许的 已经变私密属性了。
但为什么显示出来了?因为show是内部的,可以显示出来,若是在外面就不可以了。
这个叫不希望被使用的,但是可不可以被使用呢?可以被使用的
先这样...再那样...最后再这样...
print(dir(stu))
发现了age但是是Student的age 所以复制一下
print(stu._Student__age)
语法结构为:_类名_+实例属性
这就是封装 ,其实也可以访问,但是不建议访问这个操作
2.3继承
2.3.1语法格式:class子类类名(父类1,父类2...):
pass
注意:如果一个类没有继承任何类,默认继承object
python支持多继承,定义子类时,必须在构造函数中调用父类的构造函数
———— 14:45——
准备去跟导师与实验室聚餐了,晚上如果回来很早就继续把剩下的抓紧学完,不然明天压力又大了起来。
先发布下。