Python之面向对象
主要介绍类的相关知识、方法与装饰器等进行介绍
1.类的相关知识
类:可以用class表示;
对象:可以用object,instance(实例)
属性与方法:可通过类定义数据类型的属性和方法(一般指函数)
class people:
def __init__(self,name,age): #第一个参数固定为self,指刚创建的实例对象,用于初始化对象
self.name = name #实例属性
self.age = score
self.sex = 'man' #设定指定属性
def info(self): #实例方法,第一个参数必须为self,self指实例对象
print("他的名字为:{0},年龄为:{1}".format(self.name,self.age))
s = people('李四',18) #s为实例对象,自动定义__init__()方法
s.info()
其他操作
dir(s) #获得对象的所有属性和方法
s.__dict__ #对象的属性字典
isinstance(s,object) #判断“对象”是不是“指定类型”
2.类方法
类方法通过装饰器@classmethod来定义,注意要点有三:
- @classmethod必须位于方法上面一行
- 第一个参数为cls,cls指的是"类对象"本身
- 类方法中访问实例属性与方法会报错
- 当子类继承父类时,传入的cls为字类对象
class people:
sex = 'female'
@classmethod
def info(cls):
print(cls.sex)
people.info() #不需要给cls传值
静态方法
静态方法,即与“类对象”无关的方法,但需要通过“类调用”,具体可通过@staticmethod来定义,注意:
- 调用静态方法为:类名.静态方法名(参数)
- 静态方法中访问实例属性和方法会报错
class people:
sex = "female"
@staticmethod
def sum(a,b): #静态方法
print("求得a+b={0}".format(a+b))
return a+b
people.sum(1,2)
析构函数
del()叫做析构方法,可用于实现对象被销毁时候的操作,Python中当对象没有被引用时,由垃圾回收器自动调用__del__()
__call__方法
Python中,凡是可以将()直接应用到自身并执行的,都可以成为可调用对象
注意:
方法没有重载,若定义了两个相同名字的方法,默认使用最后一个方法
方法的动态性
可动态的为类添加新的方法,或动态修改类已有的方法
class people:
def age(self):
print("年龄")
def sex(s):
print("性别")
def name(s):
print("姓名")
people.info = sex #添加方法
people.age = name #修改方法
people().info() #性别
people().age() #姓名
私有方法与私有属性
当以两个下划线开头的属性定义为私有的,其他的为公共的,注意,类内部可以访问私有属性,类外部不能访问私有属性,但外部可以通过__类名__私有属性名进行访问
class Employee:
__company = "com"
def __init__(self,name,age):
self.name = name
self.__age = age
def say_company(self):
print("我的公司",Employee.__company)
print("姓名",self.__age)
def __work(self):
print("啊")
p1 = Employee("李四",22)
print(p1.name)
print(p1._Employee__age) #调用私有属性,注意第一个下划线是一个,第二个是两个下划线
p1._Employee__work() #调用私有方法
3.@property装饰器
@property可以将一个方法的调用方式变成“属性调用”,该装饰器可以约束操作,如可约束输入数字的范围
class Student:
def __init__(self,name,age):
self.name = name
self.__age = age
@property #相当于age属性的getter方法
def age(self):
print("年龄{0}".format(self.__age))
return self.__age
@age.setter
def age(self,age): #相当于salary属性的setter方法
if (0<age<100):
self.__age=age
else:
print("输出错误")
f1 = Student("g",10000)
print(f1)
f1.age #年龄10000 10000
f1.age = -10 #操作时,超过(0,100)报错
扩展:None,在python中,None是一个特殊的常量,表示变量没有指定任何对象,None本身是对象,有自己的类型NoneType,且None和任何其他的数据类型比较永远返回False;
c = None
if c is None and c==None:
print("c是None")
if c==False or c==0: # c与0比较返回false
print("None不等于False")
#if判断时,空列表[],空字典{},空元组()、0等一系列代表空或无的对象会转换为False
# ==和is判断时,空列表、空字符串不会自动转成False