Python3.x基础学习-类--类属性和实例属性

2021-02-16 12:19

阅读:452

标签:mat   money   name   定义   添加   不可   对象   格式   nes   

类属性和实例属性

 

定义:

实例属性:在实例对象中定义的属性
类属性: 在类对象中定义的属性,并且多个实例对象共享一份类属性
类属性使用方式:类名.类属性,也可以使用 对象.类属性
注意:
1.不可变类型:对象名。属性名=属性值 是给对象添加属性,而不是进行修改
2. 可变类型:如果对象是修改可变数据类型变量中的数据,是真正的修改如果是重新给可变数据类型变量赋值,这是给该对象添加属性

 

class Dog:
    pass

dog=Dog

dog.name = 旺财
print(dog.name)
dog.name = 大黄
print(dog.name)


class Course:
    language = "Chinese"
    course = [Python]
    def money(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)

 

 

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

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

class Classname:
    @staticmethod
    def fun():
        print(静态方法)

    @classmethod
    def a(cls):
        print(类方法)

    # 普通方法
    def b(self):
        print(普通方法)



Classname.fun()
Classname.a()
# Classname.b()

C = Classname()
C.fun()
C.a()
C.b()

 

 

 

静态方法

Python 中允许定义与”类对象“无关的方法,称为”静态方法“
静态方法和模块中定义普通函数没有区别,只不过静态方法放到了类的名字空间里面,需要通过类调用

静态方法通过装饰器@staticmethod 来定义。格式
@staticmethod
def 静态方法名([形参列表])
函数体

要点如下:
1.@staticmethod必须位于方法上面的一行
2.调用静态方法格式:类名.静态方法名(参数列表)
3.静态方法中访问实例属性和实例方法会导致错误

class Student:
    company = SXT

    @staticmethod
    def add(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__ = type


class Tst:
    name = tst
    data = this is data
    # 普通方法
    def normalMethod(self, name):
        print(self.data, name)
    # 类方法,可以访问类属性
    @classmethod
    def classMethod(cls, name):
        print(cls.data, name)
    # 静态方法,不可以访问类属性
    @staticmethod
    def staticMethod(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.静态方法可以通过类对象调用

 

Python3.x基础学习-类--类属性和实例属性

标签:mat   money   name   定义   添加   不可   对象   格式   nes   

原文地址:https://www.cnblogs.com/johnsonbug/p/12702702.html


评论


亲,登录后才可以留言!