类 / 对象

来源:互联网 发布:斯巴达英雄java游戏 编辑:程序博客网 时间:2024/06/07 23:31

创建一个类

类的名称: 标识符的命名规则,见名知意, 首字母大写, 然后遵从驼峰命名法
类的属性: 标识符的命名规则,见名知意 ,驼峰命名法
类的方法: 标识符的命名规则,见名知意, 驼峰命名法

格式:
class 类名(父类列表):
属性(变量)
行为(方法)

class Add(object):    # 属性    name = 'chu'    age = 20    weight = 130    # 方法(行为)    def eat(self):        print('%s真能吃'%self.name)# 创建对象# 格式:   变量名(对象名) = 类名(参数列表)pp = Add()# 访问属性# 格式:   对象名.属性名print(pp.name)# 修改属性pp.age = 200print(pp.age)# 访问方法pp.eat()

构造方法

根据需要构造一个类出来
通常使用来做数据的初始化工作,在类创建的时候自动调用

class Add(object):    # 构造属性    def __init__(self,name,age,weight):        self.name = name        self.age = age        self.weight = weight    def eat(self):        print('%s真能吃'%self.name)# 传入参数,跟构造的属性一一对应pp = Add('chu',18,120)# 访问属性和方法的结构不变print(pp.name)pp.eat()

析构函数

#     当对象释放的时候自动调用,释放函数    def __del__(self):        print("析构函数")

重写str

把属性所对应的值和属性一块输出来,方便用户的查看
在调用print打印对象时自动调用,是给用户用的,是一个描述对象的方法

class Add(object):    def __init__(self,name,age,weight):        self.name = name        self.age = age        self.weight = weight    def eat(self):        print('%s真能吃'%self.name)    # 重写str    def __str__(self):        # 初始化        return 'name = %s, age = %d, weight = %d'%(pp.name,pp.age,pp.weight)pp = Add('chu',18,120)print(pp)print('name = %s, age = %d, weight = %d'%(pp.name,pp.age,pp.weight))name = chu, age = 18, weight = 120name = chu, age = 18, weight = 120

访问限制

属性前加两个下划线
需要通过set/get的方法进行操作

这里写图片描述

对象属性和类属性

class Person(object):    # 在类中的(非方法里)属于类属性(用类名来表示)    age = 100    def __init__(self,age):        # 在方法中的属性属于对象属性(用对象来调用)        self.age = ageprint(Person.age)p = Person(200)# 对象属性的优先级高于类属性print(p.age)# 删除对象中的属性时,在调用会使用同名的类属性del p.ageprint(p.age)# 以后千万不要对象属性与类属性重名,# 因为 对象属性会屏蔽掉类属性,但是当删除对象属性后,又能使用类属性

释放私有属性 @property

把私有属性变为共有的,可以随意访问

class chu(object):    def __init__(self,name,age):        self.name = name        self.__age = age    # 类似于set/get方法,但是又好像是set/get的反操作    @property    def age(self):        return self.__age    @age.setter    def age(self,age):        self.__age = agecc = chu('chu',23)print(cc.name)# 可以访问了print(cc.age)

动态添加方法

from types import MethodType# 定义空的类class Person(object):    # __slots__用来限制属性, 值为元组形式    __slots__ = ("age","name","say")# 创建对象# 动态的给对象添加属性,这是动态语言的特性(灵活)# 动态添加的属性只对当前对象生效, 对于类创建的对象没有用p = Person()p.age = 30print(p.age)# 动态创建方法def  say(self):    print("%s正在说话"%(self.name))p = Person()p.name = "tom"# #动态的添加方法p.say  = say# # 调用p.say(p)# 动态的添加函数def  say(self):    print("%s正在说话"%(self.name))p = Person()p.name = "tom"p.say = MethodType(say,p)p.say()# 需要限制class的属性# python是允许在定义class的时候,定义一个特殊的变量 __slots__变量,来限制class添加属性p = Person()p.hello = 10print(p.hello)p.age = 10print(p.age)
原创粉丝点击