Python3.x基础学习-类--类属性和实例属性
2021-02-16 12:19
标签:mat money name 定义 添加 不可 对象 格式 nes 实例属性:在实例对象中定义的属性 不可变类型:对象名.属性名=属性值 是给对象添加属性值,而不是进行修改 可变类型:如果对象是修改可变数据类型变量中的数据,是真正的修改 类可以调用实例方法、静态方法、类方法和类属性,但是不能调用实例属性 实例对象能调用所有的方法和属性 静态方法 Python 中允许定义与”类对象“无关的方法,称为”静态方法“ 静态方法通过装饰器@staticmethod 来定义。格式 要点如下: 普通方法 Python3.x基础学习-类--类属性和实例属性 标签:mat money name 定义 添加 不可 对象 格式 nes 原文地址:https://www.cnblogs.com/johnsonbug/p/12702702.html类属性和实例属性
定义:
类属性: 在类对象中定义的属性,并且多个实例对象共享一份类属性
类属性使用方式:类名.类属性,也可以使用 对象.类属性
注意:
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()
静态方法和模块中定义普通函数没有区别,只不过静态方法放到了类的名字空间里面,需要通过类调用
@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基础学习-类--类属性和实例属性
文章链接:http://soscw.com/index.php/essay/56090.html