class Student:
//count = 0 // count变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用Student.count访问。
//init()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
def __init __(self,name,age):
self.name = name
self.age = age
Student.count =Student.count + 1
//在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,叫做实例方法:
def one(self):
print('name:',self.name,'age:',self.age)
print('Zount:',Student.count) //如果在这打印的话,得到的就是0,因为还没有给传参
//下边俩是创建实例对象
st1 = Student('大傻',12)
st2 = Student('二傻',23)
//使用点(.)来访问对象的属性。
st1.one() //name ;大傻,age:12
st2.one() //name ;大傻,age:12
//使用类的名称访问类变量:
print('Zount:',Student.count) //这个打印出来就是2 ,这个Student.count是在st1,st2,传了参数以后就会触发的,
//可以添加,删除,修改类的属性:
st1.name = ‘是是是’ //修改
st1.grade = 343 // 增加
del st1.age //删除age属性
//判断st1中有没有age,有就返回true
bol = hasattr(st1, 'age')
print(bol)
//我们来解释一下实例变量
实例变量(实例属性,对象属性,属性)
def init(self,name,age): # 实例变量要定义在这个函数里,该函数接收的第一个参数是
指针类型
self指针永远指向该类创建出的某个对象 不会随着对象的变化而更改
init函数在调用类创建对象过程中会自行调用执行,不需要手动调用此函数
//我们来说一下定义类方法@classmethod
class Student:
country = 'china'
def init(self):
self.country = 'Ameian'
@classmethod (#装饰器 待我确定到底有啥用)
//通过系统装饰器classmothod声明函数为类方法,类方法中的self指针指向的是类本身
也就意味着类方法只能访问类变量,或类属性,不能访问实例变量,就是不走那个init方法
def say(self):
print('我的国家是:'+self.country)
stu = Student()
stu.say() //我的国家是:china
Student.say() //我的国家是:china
特性:property 属性中的一种
class Student:
def init(self,name):
self._name = name
def hello(self):
return self._name+'hrllp'
st = Student('zhangsan')
print(st._name) san1//zhang
st.hello = 'coiad'
print(st.hello) //coiad
//如果这个时候
class Student:
def init(self,name):
self._name = name
@property
def hello(self):
return self._name+'hrllp'
st = Student('zhangsan')
print(st._name) //zhang
st.hello = 'coiad'
print(st.hello) //就会报错,因为不让修改
//也就是,如果调用特性,则用户只能访问不能设置
//接下来就解释一下,怎么修改
//设置器:专门给特性使用,用来修改特性的值
@姓名.setter
class Student:
def init(self,name):
self._name = name
@property
def hello(self):
return self._name
@hello.setter
def hello(self,num): //这里的num是要改成什么值
if type(num) is int:
self._num = num;
else:
print(‘请输入正值’)
删除器:通过del删除某个特性时,如果定义了删除器,则该操作会执行删除中的代码
@name.deleter
def name(self):
print('不能删')
st = Student('zhangsan')
print(st._name)
stu.name = 122
print(stu.name) //就把特性的值给改了
del stu.name //打印出来不能删
py中的私有化机制:属性名改写,在所有需要私有化的属性前添加俩下划线,则该属性名会变成:类名_属性名
class Student:
def init(self):
self.name = 'sdsdd'
def __say(self):
print(''hello,'+self.name')
stu = Student()
stu._Student__say()
//继承
class A:
def init(self):
self.name = 'zhang'
def say(self):
print('我是父类')
class B(A): # 声明继承关系,在子类名后跟小括号,小括号里是要继承的父类名
# 继承的语法
# 继承关系中init方发的执行逻辑:
# 在子类没有实现inIT方法时,会触发父类中的init执行
# 如果子类实现了init,则只触发子类的init,不会触发父类的
def init(self):
# 手动调用父类的init函数
A.init(self)
print('我是子类的')
def Bsay(self):
print('我是子类')
# 在子类中腹泻父类中的方法
def say(self):
A.say(self)
print('我是腹泻的子女数据')
a = A()
b = B()
b.say()
print(b.name)
//我是子类的
//我是父类
//我是腹泻的子女数据
//zhang
# type() 获取到对象的数据类型(内置数据类型)
print(type(12.34) is int)
class A:
pass
class B(A):
pass
a = A()
print(type(a) is A)
isinstance 用来判断对象和类之间的关系,一般是自定义对象
bol = isinstance(a,A)
print(bol)
issubclass 判断B是否继承自A
bol = issubclass(B,A)
print(bol)
网友评论