面向对象~~类的成员: 私有成员,公有成员, 实例方法, 类方法, 静态方法, 属性(property), isinstance ,issubclass, 元类(type)
一 私有成员公有成员
-
公有成员: 在任何地方都能访问
-
私有成员: 只有在类的内部才能访问
类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名
二 实例方法
实例方法就是类的实例能够使用的方法
三 类方法
类方法使用装饰器 @classmethod
类方法: 一般就是通过类名去调用的方法,并且自动将类名地址传给cls,
但是如果通过对象调用也可以,但是传的地址还是类名地址.
class Student:
count = 0
def __init__(self,name,id):
self.name = name
self.id = id
Student.stu_num()
@classmethod
def stu_num(cls):
cls.count += 1
@classmethod
def get_num(cls):
print(f'学生的数量是{cls.count}')
xiaohu = Student('小虎',123)
# xiaohu.get_num()
Student.get_num()
类方法作用:
- 得到类名可以实例化对象.
- 可以操作类的属性.
四 静态方法
静态方法使用装饰器 @staticmethod。
静态方法是不依赖于对象与类的,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数
保证代码的规范性,合理的划分.后续维护性高.
import time
class TimeTest(object):
def __init__(self, hour, minute, second):
self.hour = hour
self.minute = minute
self.second = second
@staticmethod
def showTime():
return time.strftime("%H:%M:%S", time.localtime())
print(TimeTest.showTime())
t = TimeTest(2, 10, 10)
nowTime = t.showTime()
print(nowTime)
五 属性 property
将动态方法 伪装 成了一个属性,虽然在代码级别上没有什么提升,但是让你看起来更合理.
class Foo:
@property
def AAA(self):
print('get的时候运行我啊')
@AAA.setter
def AAA(self,value):
print('set的时候运行我啊')
@AAA.deleter
def AAA(self):
print('delete的时候运行我啊')
#只有在属性AAA定义property后才能定义AAA.setter,AAA.deleter
f1=Foo()
f1.AAA # 执行property
f1.AAA='aaa' # 执行AAA.setter
del f1.AAA # 执行AAA.deleter
class Foo:
def get_AAA(self):
print('get的时候运行我啊')
def set_AAA(self,value):
print('set的时候运行我啊')
def delete_AAA(self):
print('delete的时候运行我啊')
AAA=property(get_AAA,set_AAA,delete_AAA)
#内置property三个参数与get,set,delete一一对应
f1=Foo()
f1.AAA
f1.AAA='aaa'
del f1.AAA
六 isinstance issubclass
isinstance(a,B):判断a是否是B类(或者B类的派生类)实例化的对象
issubclass(A,B): 判断A类是否是B类(或者B的派生类)的派生类
七 元类type
获取该对象从属于的类
print(type('abc'))
Python原则是:一切皆对象,其实类也可以理解为'对象',而type元类又称作构建类,python中大多数内置的类(包括object)以及自己定义的类,都是由type元类创造的。
type类与object类之间的关系比较独特:object是type类的实例,而type类是object类的子类,这种关系比较神奇无法使用python的代码表述,因为定义其中一个之前另一个必须存在。