python访问实例属性x_Python3.x基础学习-类--类属性和实例属性

类属性和实例属性

定义:

实例属性:在实例对象中定义的属性

类属性: 在类对象中定义的属性,并且多个实例对象共享一份类属性

类属性使用方式:类名.类属性,也可以使用 对象.类属性

注意:

1.不可变类型:对象名。属性名=属性值 是给对象添加属性,而不是进行修改

2. 可变类型:如果对象是修改可变数据类型变量中的数据,是真正的修改如果是重新给可变数据类型变量赋值,这是给该对象添加属性

classDog:passdog=Dog

dog.name= ‘旺财‘

print(dog.name)

dog.name= ‘大黄‘

print(dog.name)classCourse:

language= "Chinese"course= [‘Python‘]defmoney(self):print(‘败家‘)print(id(Course))#类属性可以通过类对象和实例对象调用

print(Course.language,Course.course) #类名.类属性

python=Course()print(python.course,python.language) #对象名.类属性

#添加实例属性

python.time= 20

print(python.time)#print(Course.time) #实例属性只能通过实例对象进行调用,不可以通过类对象调用

不可变类型:对象名.属性名=属性值 是给对象添加属性值,而不是进行修改

修改类属性,可以通过类对象修改

print(Course.language) #Chinese

Course.language = "python"

print(Course.language)

python=Course()

python.language= ‘I love python‘ #是给对象添加属性,而不是进行修改

print(python.language)print(Course.language)

可变类型:如果对象是修改可变数据类型变量中的数据,是真正的修改

如果是重新给可变数据类型变量赋值,这是给该对象添加属性

print(Course.course)#修改可变类型的类属性 类对象.属性名

Course.course.append(‘java‘)print(Course.course)

python=Course()

python.course.append(‘C‘)print(python.course,Course.course)

python.course= [‘python‘,‘C++‘] #给该对象添加属性

print(python.course) #[‘python‘, ‘C++‘]

print(Course.course) #类属性并没有修改[‘Python‘, ‘java‘, ‘C‘]

python.money()

Course.money(Course)

类可以调用实例方法、静态方法、类方法和类属性,但是不能调用实例属性

实例对象可以调用实例方法、类方法、静态方法、类属性和实例属性

实例对象能调用所有的方法和属性

而类除了不能调用实例属性,其他方法和属性都能够调用

classClassname:

@staticmethoddeffun():print(‘静态方法‘)

@classmethoddefa(cls):print(‘类方法‘)#普通方法

defb(self):print(‘普通方法‘)

Classname.fun()

Classname.a()#Classname.b()

C=Classname()

C.fun()

C.a()

C.b()

静态方法

Python 中允许定义与”类对象“无关的方法,称为”静态方法“

静态方法和模块中定义普通函数没有区别,只不过静态方法放到了类的名字空间里面,需要通过类调用

静态方法通过装饰器@staticmethod 来定义。格式

@staticmethod

def 静态方法名([形参列表])

函数体

要点如下:

1.@staticmethod必须位于方法上面的一行

2.调用静态方法格式:类名.静态方法名(参数列表)

3.静态方法中访问实例属性和实例方法会导致错误

classStudent:

company= ‘SXT‘@staticmethoddefadd(a,b):print(‘{0}+{1}={2}‘.format(a,b,(a+b)))return a+b

Student.add(20,30)

a=Student()

a.add(1,2)__metaclass__ =typeclassTst:

name= ‘tst‘data= ‘this is data‘

#普通方法

defnormalMethod(self, name):print(self.data, name)#类方法,可以访问类属性

@classmethoddefclassMethod(cls, name):print(cls.data, name)#静态方法,不可以访问类属性

@staticmethoddefstaticMethod(name):print(name)

tst=Tst()

tst.data= ‘this is new‘tst.normalMethod(‘name‘)

tst.staticMethod(‘name‘)

tst.classMethod(‘name‘)print(‘------------------------------------‘)#error普通方法必须通过实例调用#Tst.normalMethod(‘name‘)

Tst.classMethod(‘name‘)

Tst.staticMethod(‘name‘)

普通方法、类方法和静态方法区别

普通方法

1.普通方法可以访问实例属性和类属性

2.普通方法不可以通过类对象调用

类方法

1.类方法可以访问类属性,不能访问实例属性

2.类方法可以通过类对象调用

静态方法

1.静态方法不可以访问类属性,不可以访问实例属性

2.静态方法可以通过类对象调用

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值