类 / 对象

本文详细介绍了Python中类与对象的基本概念,包括类的创建、属性与方法的定义及访问方式,构造方法与析构函数的作用,以及如何实现属性访问限制和动态添加方法等内容。

##创建一个类

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

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

class Add(object):
    # 属性
    name = 'chu'
    age = 20
    weight = 130

    # 方法(行为)
    def eat(self):
        print('%s真能吃'%self.name)

# 创建对象
# 格式:   变量名(对象名) = 类名(参数列表)
pp = Add()

# 访问属性
# 格式:   对象名.属性名
print(pp.name)
# 修改属性
pp.age = 200
print(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 = 120
name = chu, age = 18, weight = 120

访问限制

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

这里写图片描述

对象属性和类属性

class Person(object):
    # 在类中的(非方法里)属于类属性(用类名来表示)
    age = 100
    def __init__(self,age):
        # 在方法中的属性属于对象属性(用对象来调用)
        self.age = age

print(Person.age)
p = Person(200)
# 对象属性的优先级高于类属性
print(p.age)
# 删除对象中的属性时,在调用会使用同名的类属性
del p.age
print(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 = age

cc = 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 = 30
print(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 = 10
print(p.hello)
p.age = 10
print(p.age)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值