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

类属性和实例属性

定义:

实例属性:在实例对象中定义的属性
类属性: 在类对象中定义的属性,并且多个实例对象共享一份类属性
类属性使用方式:类名.类属性,也可以使用 对象.类属性
注意:
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 静态方法名([形参列表])
函数体

要点如下:
[email protected]必须位于方法上面的一行
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.静态方法可以通过类对象调用

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

时间: 04-15

Python3.x基础学习-类--类属性和实例属性的相关文章

python学习-类属性和实例属性

#类属性和实例属性 class Tool(object): #类属性 total = 0 def __init__(self,new_name): #实例属性 self.name = new_name #类属性 Tool.total += 1 tool1 = Tool("a1") tool2 = Tool("a2") tool3 = Tool("a3") print(tool1.name) print(tool2.name) print(tool

Python3 之 类属性与实例属性

1.类属性与实例属性 类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有. 类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似.对于公有的类属性,在类外可以通过类对象和实例对象访问. 2.实例:类属性 1 class People(object): 2 name = 'Jack' #类属性(公有) 3 __age = 12 #类属性(私有) 4 5 p = People()

Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法

From: http://www.cnblogs.com/pengsixiong/p/4823473.html 属性分为实例属性与类属性 方法分为普通方法,类方法,静态方法 一:属性: 尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性.实例属性在每创造一个类是都会初始化一遍,不同的实例的实例属性可能不同,不同实例的类属性都相同.从而减少内存. 1:实例属性: 最好在__init__(self,...)中初始化 内部调用时都需要加上self. 外部调用时用instancenam

类属性、实例属性

属性分为实例属性与类属性 方法分为普通方法,类方法,静态方法 一:属性: 尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性.实例属性在每创造一个类是都会初始化一遍,不同的实例的实例属性可能不同,不同实例的类属性都相同.从而减少内存. 1:实例属性: 最好在__init__(self,...)中初始化 内部调用时都需要加上self. 外部调用时用instancename.propertyname 2:类属性: 在__init__()外初始化 在内部用classname.类属性名

类属性和实例属性冲突

类属性和实例属性名字冲突怎么办 修改类属性会导致所有实例访问到的类属性全部都受影响,但是,如果在实例变量上修改类属性会发生什么问题呢? class Person(object): address = 'Earth' def __init__(self, name): self.name = name p1 = Person('Bob') p2 = Person('Alice') print 'Person.address = ' + Person.address p1.address = 'Ch

Python面向对象—类属性和实例属性

属性:就是属于一个对象的数据或函数元素 类有类方法.实例方法.静态方法.类数据属性(类变量)和实例数据属性(实例变量). 类属性:包括类方法和类变量,可以通过类或实例来访问,只能通过类来修改. 实例属性:包括实例方法和实例变量 class MyClass(object): name = 'Anl' def __init__(self, age): self.age = age @classmethod def class_method(cls): print "I'm class method&

Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-" 什么是面向对象 面向对象就不像面向过程那样按照功能划分模块了,它所关注的是软件系统有哪些参与者,把这些参与者称为对象,找出这些软件系统的参与者也就是对象之后,分析这些对象有哪些特征.哪些行为,以及对象之间的关系,所以说面向对象的开发核心是对象 什么是类 面向对象编程的两个重要的概念:类和对象 类是

python 类属性与实例属性

#__author__ = 'juzi_juzi' #类属性与实例属性 #1.无法通过类访问实例属性: #2.类属性归类所所有,但是所有实例都可访问: #3.如果存在相同名称的类属性与实例属性,实例访问的时候会优先使用实例属性,实例找不到该属性再找类属性: #4.实例修改了类属性值,但原类属性对应的值仍存在: class Test(): count = 3 # count 为类属性: def __init__(self,name,age): self.name = name #name ,age

python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法

类对象.类属性与实例对象.实例属性的区别 在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性.类属性在内存中只有一份,在__init__外部定义. 通过类创建的对象称为实例对象,描述实例对象的属性称为实例属性.实例属性在各自对象的内存中都保存一份,在__init__方法内部定义. 实例方法.类方法.静态方法的区别 这三种方法都是保存在类的内存中,调用者不同. 实例方法由对象调用,至少一个self参数,self代表对象的引用. 类方法有类调用,至少一个cls参数,并且

python基础1-类属性和实例属性

类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似.对于公有的类属性,在类外可以通过类对象和实例对象访问 类属性 class people: name = 'Tom' #公有的类属性 __age = 12 #私有的类属性 p = people() print p.name #正确 print people.name #正确 print p.__age #错误,不能在类外通过实例对象访问私有的类属性 print people