【python】类属性以及实例属性、实例方法的介绍

1. 类的组成

class Demo():
    var = 'demo' # 类属性,公有
    __num = 100  # 类属性,私有

    def __init__(self,name='muzi',age=18):
        self.name = name   # 实例属性,公有
        self.__age = age   # 实例属性,私有
        print('demo构造方法,特殊方法,私有')
        print('内置属性,获取类名:',Demo.__name__) #内置属性,自带

    def fun1(self):
        print('fun1实例方法,公有')

    def __fun2(self):
        print('fun2实例方法,私有')

    @classmethod
    def class_fun(cls):
        print('class_fun类方法,装饰器@classmethod')

    @staticmethod
    def static_fun():
        print('static_fun静态方法,装饰器@staticmethod')

    @property
    def prop(self):
        print('prop属性方法,装饰器@property')

print('类的所有属性与方法:',Demo.__dict__)
d = Demo()
print('对象的所有属性:',d.__dict__)
print('打印出类名:',Demo.__name__)

2. 类的属性

1-类属性:
    位置:声明在类中,函数外面的
    查看属性值:
        类名.属性名    --推荐
        对象名.属性名   --很少用

    修改属性值:
        类名.属性名 = 新值   --推荐
        对象名.属性名 = 新值  --很少用

        总结:对象名.属性名方式修改属性值后,只有此对象访问的属性是修改后的值,其他对象访问时还是原来的值
        总结:类名.属性名方式修改属性值后,无论某个对象访问的该属性,都是修改后的值
class Demo():
    var = 'var_demo' # 类属性,公有
    __num = 100  # 类属性,私有---私有的只能在本类中使用

    def test(self):
        print('test')

    def p_var(self):
        # Demo.var = '1233'
        print(Demo.var)   #类名.属性名

    def p_num(self):
        print(Demo.__num)  #类名.属性名

'''1.1 查看类属性值:
类名.属性名
'''
# 1-查看公有/私有类属性
#1.1 类外面使用类属性
print(Demo.var)
# print(Demo.__num)  #AttributeError: type object 'Demo' has no attribute '__num'

# 1.2 类里面使用类属性
d = Demo()
d.p_num()
d.p_var()
总结:私有类属性只能在本类使用,出了本类就不可以用,公有类属性在哪都可以用
1.2 修改类属性值:
类名.属性名 = 新值

 2-修改公有/私有类属性
  2.1 类外面修改类属性
Demo.var = 'test_var'
print(Demo.var)

# 私有属性,是不可以在类外面去修改
Demo.__num = 500
print(Demo.__num)  # 并没有真正修改私有类属性的值,而是Demo.__num当成了一个变量

# 判断Demo.__num是否真正的修改
d = Demo()
d.p_num()  # 500==成功   100==失败

zs = Demo()
ls = Demo()
print(zs.var)
print(ls.var)
总结:类名.属性名方式修改属性后,无论某个对象访问的该属性,都是修改后的值

 

3. 类的实例属性

位置:声明在类中的构造方法里面的

调用属性值:
    self.属性名    --在类里面用的时候
    对象名.属性名   --在类外面用的时候

修改属性值:
    self.属性名  = 新值   --在类里面用的时候
    对象名.属性名 = 新值  --在类外面用的时候
class Demo():
    var = 'demo' # 类属性,公有
    __num = 100  # 类属性,私有

    def __init__(self,mname='muzi',mage=18):
        self.name = mname   # 实例属性,公有
        self.__age = mage   # 实例属性,私有
        print('demo构造方法,特殊方法,私有')

    def info(self):
        self.name = 'test_demo'
        print('姓名:{},年龄:{}'.format(self.name,self.__age))



'''2-1 查看实例属性值
# 对象.属性名
# self.属性名   --本类中使用'''
# 2.1.1 类外面使用实例属性
muzi = Demo()
# print('姓名:{}'.format(muzi.name))
# # print('年龄:{}'.format(muzi.__age))  #AttributeError: 'Demo' object has no attribute '__age'
zs = Demo('zs','18')
# print('姓名:{}'.format(zs.name))  # zs
#
# ls = Demo('ls',20)
# print('姓名:{}'.format(ls.name))  # ls

# 2.1.2 类里面使用实例属性
zs.info()
muzi.info()

''' 2-2 修改实例属性值
# 对象.属性名 = 新值
# self.属性名 = 新值   --本类中使用'''
# 2.2.1 类外面修改实例属性
muzi = Demo()
muzi.name = 'test_muzi'
muzi.info()

zs = Demo('zs',18)
zs.info()  #姓名:zs,年龄:18

4. 内置属性

内置属性:python自定义的一些属性,通过调用来获取对应类的相关属性信息。常见的有:
    [类名].__dict__:打印类的所有属性与方法(包括继承自基类的属性和方法)(包括内置属性和方法)
    [对象].__dict__:打印对象的所有属性(私有和公有)
    [类名].__name__: 打印出类名
class Demo():
    var = 'demo' # 类属性,公有
    __num = 100  # 类属性,私有

    def __init__(self,name='muzi',age=18):
        self.name = name   # 实例属性,公有
        self.__age = age   # 实例属性,私有
        print('demo构造方法,特殊方法,私有')
        print('内置属性,获取类名:',Demo.__name__) #内置属性,自带

    def fun1(self):
        print('fun1实例方法,公有')

    def __fun2(self):
        print('fun2实例方法,私有')

print(Demo.__dict__)

5. 实例方法

    跟普通方法基本一致,默认第一个参数为self,self 代表的是实例对象,且只能被实例对象调用。

    语法:
        self.实例方法名()    --在类里面用的时候
        对象名.实例方法名()   --在类外面用的时候
# class Demo():
#     var = 'var_demo' # 类属性,公有
#     __num = 100  # 类属性,私有---私有的只能在本类中使用
#
#     def test(self): # 公有实例方法
#         # 实例方法的变量
#         self.num = 1
#         print('test')
#
#     def p_getnum(self):
#         print(self.num)  # 能=1  不能=2
#
#     def __p_var(self,num=1):# 私有实例方法
#         print(Demo.var,num)   #类名.属性名
#
#     def p_num(self):
#         self.__p_var(111)
#         print(Demo.__num)  #类名.属性名
#
# # 1.类外面调用实例方法
# d = Demo()
# d.test()
# # d.__p_var()  #AttributeError: 'Demo' object has no attribute '__p_var'
#
#
# # 2.类里面调用实例方法
# print(11)
# d.p_num() #var_demo 111   100
# print(222)


class Demo():
    var = 'var_demo'  # 类属性,公有
    __num = 100  # 类属性,私有---私有的只能在本类中使用

    def test(self):  # 公有实例方法
        # 实例方法的变量
        self.num = 1
        print('test')

    def p_getnum(self):
        print(self.num)

    def __p_var(self, num=1):  # 私有实例方法
        print(Demo.var, num)  # 类名.属性名

    def p_num(self):
        self.__p_var(111)
        print(Demo.__num)  # 类名.属性名
# 3.实例方法中的变量跨方法能否进行调用呢
t = Demo()
t.p_getnum()   #AttributeError: 'Demo' object has no attribute 'num'
# 总结:实例方法中定义的变量只能在本实例方法中使用,一旦出了本实例方法,则无法使用,
# 因为实例方法中的变量的作用域只有在本实例中

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值