python 是动态语言,对于类,使用是非常灵活和方便的。
本文还有一些没补充,下次补充
目录
一、类属性
类属性--查询
类属性查询方法: 类对象名.类属性名 (建议这个方法)
或者实例对象名.类属性名 (不建议,而且前提是没有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
未完待续