【python3】详解属性、方法

这篇博客详细介绍了Python3中的类属性、实例属性和实例方法。包括如何查询和修改类属性,以及在同类和不同类中如何调用实例方法。文章通过多种示例展示了Python动态修改属性和调用方法的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python 是动态语言,对于类,使用是非常灵活和方便的。

本文还有一些没补充,下次补充

 

目录

一、类属性   

类属性--查询

类属性--修改

(一)、用__init__方法,修改类属性

(二)、用类方法,修改类属性

(三)、动态修改类属性

二、实例属性  

实例属性--查询

实例属性--修改

三、实例方法   

(一)、同类中,调用实例方法

(二)、不同类中,调用实例方法


 

 

 

一、类属性   

类属性--查询

类属性查询方法: 类对象名.类属性名  (建议这个方法)

或者实例对象名.类属性名 (不建议,而且前提是没有init方法,否则会优先取init方法中的属性名)

类属性--修改

(一)、用__init__方法,修改类属性

class Dog(object):
    name = '小狗'

    def __init__(self):
        self.name = '大狗'


d1 = Dog()
print(d1.name)

总结:使用初始化__init__方法,可以修改类属性。只不过假性修改,原类属性的值还是存在

 

(二)、用类方法,修改类属性

class Dog(object):
    name = '小狗'

    def __init__(self):
        self.name = 'init大狗'
    @classmethod
    def test(cls):
        cls.name = '大狗' #修改类属性

d1 = Dog()
print(Dog.name)

d1.test() #调用类方法-test
print(Dog.name)  

注意:创建类方法,格式:开头@classmethod 然后括号里面是cls。不理解类方法请复习。

总结:类方法 可以修改类属性, 和init 方法比较。init方法是创建实例对象的时候自动执行init 了,当然也自动修改类属性。

而类方法则需要调用一下才生效。

 

(三)、动态修改类属性

对象实例化后,再去修改也是可以的。这就是python的特性。看下案例

class Dog(object):
    name = '小狗'

    def __init__(self):
        self.name = 'init大狗'
    @classmethod
    def test(cls):
        cls.name = '大狗' #修改类属性

d1 = Dog()
d1.test()
print(Dog.name)
Dog.name = '柴犬'
print(Dog.name)  

 

 

 

总结:可以动态地去修改类属性

 

二、实例属性  

实例属性--查询

class Test():
    name = '类属性'

    def __init__(self):
        self.name = '实例属性name'
        self.lastname = '实例属性lastname'
t= Test()
#查询实例属性
print(t.name)
print(t.lastname)
# print(Test.name)  #实例属性不能通过 类对象名字.属性名字 来访问

实例属性--修改

class Test():
    def __init__(self):
        self.name = '实例属性name'

t= Test()
print(t.name)

t.name ='hello'  #修改实例属性为hello
print(t.name)

 

 

 

三、实例方法   

2种方法,共8种场景举例

(一)、同类中,调用实例方法

学习目标:有2种方法,通过类对象调用,通过实例对象调用

方法(1): 通过实例对象,调用实例方法
方法(2):通过类对象,调用实例方法

1、类方法只有一个参数self 的情况:

学习目的:同类中调用方法(实例方法),该怎么处理。

class Cat:
    def cat_age(self):
        print('---猫的年龄未知---')

c = Cat()  #必须要先实例化,才能调用方法(无论什么方法)
c.cat_age()  #用实例对象,调用实例方法
Cat.cat_age(c) #用类对象,调用实例方法,需要加self参数

运行结果:

---猫的年龄未知---
---猫的年龄未知---

2、类方法有多个参数的情况

学习目的:同类中调用方法(实例方法),方法有多个参数时,该怎么处理。

class Cat:
    def cat_age(self,age):
        return '猫的年龄是%d' % age

    #该方法和第一个完全一样,如果后续需要传递值,则加self.age2=age2,否则就简单写一下return就行
    # def cat_age2(self, age2):
    #     self.age2=age2
    #     return '猫的年龄是%d' % age2

c = Cat()

test=Cat.cat_age(c,18)  #用类对象,调用实例方法,需要加self参数
print(test)
test=c.cat_age(18)  #用实例对象,调用实例方法
print(test)

运行结果:

猫的年龄是18
猫的年龄是18

 

(二)、不同类中,调用实例方法

学习目标:有2种方法

方法(1): 通过实例对象,调用实例方法
方法(2):通过类对象,调用实例方法

 

 

1、类方法只有一个参数self 的情况:

学习目的:多个类调用其他类方法(实例方法),该怎么处理。

class Cat:
    def cat_age(self):
        print('---它的年龄未知---')
class Dog:
    def dog_age(self):
        print('狗的年龄?')
        return Cat.cat_age(self) #调用其他类的实例方法

d = Dog()  #首先实例化
#实现Dog类 调用其他类实例方法,一共有2种实现:
d.dog_age()  # 1、通过实例对象,调用实例方法
Dog.dog_age(d)  # 2、通过类对象,调用实例方法

运行结果:

狗的年龄?
---它的年龄未知---
狗的年龄?
---它的年龄未知---

 

2、类方法有多个参数的情况

学习目的:多个类调用其他类方法(实例方法),方法有多个参数时,该怎么处理。

想要Dog类可以使用Cat类的方法:

class Cat:
    def cat_age(self,age):
        return '它年龄是%d' % age
class Dog:
    def dog_age(self,age):
        print('狗的年龄?')
        return Cat.cat_age(self,age)

d = Dog() #不需要实例化Cat,因为我只用到 Dog类中的方法

print(d.dog_age(18))  # 1、通过实例对象,调用实例方法

print(Dog.dog_age(d,18))   # 2、通过类对象,调用实例方法

运行结果:

狗的年龄?
它年龄是18
狗的年龄?
它年龄是18

 

 

 

 

 

 

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值