Python 面向对象成员

Python 面向对象成员

所有面向对象成员(6个)
  1. 变量(2)
    实例变量
    类变量
  2. 方法(3)
    实例方法
    类方法
    静态方法
  3. 属性(1)
    属性
变量(类中的函数)
  1. 实例变量(字段), 写在__init__中的变量,实例化一个对象时就设置的变量
#应用场景:当类中多个方法使用共同的某个值时,这时可以将该值封装成实例变量,方便调用
class Person:
    def __init__(self,name='小明'):#定义构造方法
        self.name=name #定义实例变量(字段)
people1=Person()
print(people1.name) #只有实例化后才能调用,或者Person().name,效果一样
  1. 类变量(静态字段)
# 应用场景:当所有对象中有共同的字段时,且如果修改都要修改,可以将实例变量(字段)提取到类变量(静态字段中)
class Person:
    age=12#定义一个类变量
    def __init__(self,name='小明'):
        self.name=name
people1=Person()
print(people1.age)#可以通过变量名调用
print(Person.age)#也可以通过类名调用
people1.age=22 #此种修改只是修改当前对象的age值,不影响其他实例化对象
Person.age=33 #此种修改会修改类中age值,之后实例化的对象age值为33
方法
  1. 实例方法, 格式:def 方法名(self),参数中带有self,意为只有通过对象才可调用的方法
#应用场景: 在方法中需要用到__init__中的封装的值时用实例方法比较简单
class ClassName:
    def main(self):#参数中带有self,这就是一个实例方法
        print('hello world')
demo=ClassName()
demo.main()#调用时只能使用对象名.实例化方法名()调用
  1. 静态方法,格式:在方法上加@staticmethod定义一个静态方法
#应用场景:方法中如果用不到构造方法封装的值,这时最好定义静态方法
class ClassName:
    @staticmethod #在方法前加上,说明定义一个静态方法
    def main(massage='hello world'):#可以传参,但是不能传self
        print(massage)
    def fun(self):
    	ClassName.main()#类内部调用只能用 类名.静态方法名() 调用
demo=ClassName()
demo.main()#可以通过 对象名.静态方法名() 调用
ClassName.main()#可以通过 类名.静态方法名() 调用
  1. 类方法,格式:@classmethod def 函数名(cls,)至少一个参数cls
#应用场景:如果在方法中会使用当前类(在方法中实例化该类并调用),就可以使用该方法
# 类方法其实是静态方法的一个特殊用法
class Person:
    def __init__(self,name='小明'):
        self.name=name
    @classmethod #在方法前加上,表示这是一个类方法
    def main(cls):#必须有一个cls参数,此参数python会自动传入当前类
        people1=cls() #可以通过cls实例化一个对象,并使用类中的成员
        print('hello %s'%people1.name)
demo=Person()
demo.main() #类方法可以通过 对象名.类方法名() 调用
Person.main() #类方法也可以通过 类名.类方法名() 调用
属性
  1. 属性, 在方法前加上 @property,如下:
# 应用场景:一般用于简单的方法,当无须传参,且有返回值时
class ClassName:
    def __init__(self):
        pass
    @property #加在方法前吗,表示这是一个属性
    def main(self):#参数有且只能有一个参数self
        print('Hello Python')
demo=ClassName()
demo.main#调用时至只需要使用对象面名.参数名即可
类中公有和私有成员的区别
  1. 私用成员就是在成员前加上__,格式为__成员名
  2. 私用成员不可被继承
  3. 私有成员可以在外部用特殊方法调用和查看,但是不能进行修改.方法为:对象名._类名__成员
#应用场景: 不希望类中的成员在类的外部被使用
class Person:
    __age=12#私有类变量(静态字段)
    def __init__(self,name='小明'):
        self.__name=name# 私有实例变量(字段)
    def __fun(self):#私有类方法
        print(Person.__age)
    def fun(self):
        self.__fun()
people1=Person()
print(people1.__name)#不可被调用,报错
print(Person.__age)#不可被调用,报错
people1.__fun()#不可被调用,报错
people1.fun()#被调用,输出12
people1._Person__fun()#使用特殊方法,依然能够被调用,输出12,但是这种方法少用
发布了66 篇原创文章 · 获赞 7 · 访问量 2369

猜你喜欢

转载自blog.csdn.net/qq_45894553/article/details/105110150