1.什么是类:对拥有相同属性的方法的对象的封装
类中相同属性的值是不能确定的
2.什么是对象:对象是类的实例
对象的属性是确定的
3.面向对象编程
面向过程编程:一步一步的写代码实现功能-->工具:逻辑和算法
函数式编程: 面对考虑有没有拥有某种功能的函数-->工具:函数
面向对象编程:面对问题考虑有没有相应的对象来解决这个问题 -->工具:对象
类的声明:
class 类名(父类):
属性:对象属性和类的字段---保存数据
方法:实质就是声明在类中的函数 ---实现功能
类对象可以通过点击使用类中声明的对象的方法和属性
对象.属性名
对象.方法名()
对象方法默认都有一个参数self,在调用方法的时候,这个参数不用传参(系统自己传self)
谁来调用这个方法self就是谁
1.查(获得属性)
'''方法一:print(对象.属性)
方法二:对象.__getattribute__(属性)和getattr(对象,属性)
'''
print(dog1.age)
print(dog1.__getattribute__('age'))
#如果设置了default的值,那么当属性不存在的时候不会报错,并且返回默认值
print(getattr(dog1,'abc',None))
2.改
'''
方法一:对象.属性 =新值
方法二 : 对象.__setattr__(属性,修改值)和setattr(对象,属性新值)
'''
dog1.color = 'blue'
print(dog1.color)
dog1.__setattr__('color','black')
print(dog1.color)
3.增加
'''
对象.属性 = 值(属性不存在)
注意:属性是添加给对象的,不是类的
'''
dog1.name = 'xiaobai'
print(dog1.name)
dog1.__setattr__('type','哈士奇')
print(dog1.type)
4.删除 del 对象.属性
del dog1.age
dog1.__delattr__('age')
print(dog1.age)
delattr(dog1,'color')
print(dog1.color)
class Person:
__slots__ = ('name','age')
#__slots__ 约束类中的对象的属性
def __init__(self,name,age=0,sex=''):
self.name = name
self.age = age
#定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
def __str__(self):
return self.name+','+str(self.age)
p1 = Person('小王',20)
p1.names ='老王'#这里会报错因为__init__里面没有
对象属性:属于对象,不同对象对应的值可能不一样(对象属性,通过对象来使用)
类的字段:声明在类里面,在函数外面。类的属性属于类(类的字段,要通过类来使用)
方法:对象方法,类方法,静态函数
对象方法:自带一个self参数,一般要通过对象调用
类方法 :1.使用@classmethod修饰
2.自带一个cls参数,不用传参,谁来调用这个方法.cls就只向谁
3.类方法要通过类来调用
静态方法: 1.使用@staticmethod 修饰
2.没有默认参数
3.静态方法通过类来调用
怎么选择用对象方法,类方法,还是静态方法?
if 如果实现函数的功能需要使用对象的属性,就声明成对象方法
elif 如果实现函数的功能需要使用类的字段或者方法,就声明成类方法
else 如果实现函数功能既不需要对象的属性也不需要类的字段就声明成静class MyPerson:
number = 51
def __init__(self,name='',age=0):
self.name = name
self.age = age
#对象方法
def eat(self,food):
print('%s在吃%s'%(self.name,food))
#类方法
@classmethod
def hurt_earth(cls):
#cls指向的是调用这个方法的类,cls可以当成类来使用
pt = cls('张三',16)
print(pt.name,pt.age)
print(cls.number)
print('人类破坏环境')
#静态方法
@staticmethod
def protect_earth():
print('人类保护地球')
网友评论