目录

对象

实例对象的属性

对象方法(实例方法)

类对象和属性

 类方法


类与实例对象

(类与对象具有相同的方法和属性)类中可同时定义类方法与对象方法:区别在于第一个参数值

必须牢记类是抽象的模板,比如Person类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。拥有相同属性和方法的具体事物则成为这个类的实例对象。

对象

在python语言中,一切皆对象!

我们之前学习过的字符串,列表,字典等等数据都是一个个的类,我们用的所有数据都是一个个具体的实例对象。

区别就是,那些类是在解释器级别注册好的,而现在我们学习的是自定义类,但语法使用都是相同的。所以,我们自定义的类实例对象也可以和其他数据对象一样可以进行传参、赋值等操作。

实例对象的属性

属性的数据类型由对象产生时的传入参数决定

p1 = class类('zhao',20,80)

初始化__init__() 方法 作用 :构造对象属性

先定义对象属性,方法。再生成对象。(类的调用赋值产生实例化对象)

__init__() 方法可以包含多个参数,但必须包含一个名为 self 的参数,且必须作为第一个参数。还可以自定义一些参数,参数之间使用逗号“,”进行分割。

# 定义Person类
class Person(object):
    def __init__(self,name,age): 
        self.name=name
        self.age=age
        print(id(self))


# 实例化Person类的实例对象:  类实例对象=类名(实例化参数)
alvin=Person("alvin",18)
yuan=Person("yuan",22)

print(id(alvin))

注:函数 id(object)返回的是对象的“身份证号”,唯一且不变,但在不重合的生命周期里,可能会出现相同的id值。此处所说的对象应该特指复合类型的对象(如类、list等),对于字符串、整数等类型,变量的id是随值的改变而改变的。

实例变量的属性的增删改查
p1.name="alvin"
p1.age=18

p2.name="yuan"
p2.age=22

print(p1.gender)
del p2.age

对象方法(实例方法)

实例方法或者叫对象方法,指的是我们在类中定义的普通方法。只有实例化对象之后才可以使用的方法

对象方法的第一个形参接收的一定是对象本身。(self参数代表对象方法)后接自定义对象变量

例:print_info方法,,,调用时:对象 . 方法名()##yuan . print_info()

class Person(object):

    def __init__(self,name,age):
        self.name=name
        self.age=age

    def print_info(self):
        print("姓名:%s,年龄:%s"%(self.name,self.age))


yuan = Person("yuan",18)
yuan.print_info()

类对象和属性

类对象:person                  实例化对象:对象 = person类(参数)##赋值产生

类属性:类定义内直接写     实例化对象属性:init方法中的定义和类属性

 (类方法都能调用,类属性只有类能使用,类与对象属性,方法相同)

class Person:
    # 类属性
    legs_num = 2
    has_emotion = True

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def play_fire(self):

        print("%s玩火"%self.name)


# 实例对象和类对象可以获取类属性,但是只有类对象才能修改类属性
yuan = Person("yuan", 18)
alvin = Person("alvin", 18)

print(yuan.legs_num)
print(yuan.name)
# Person:一个类对象
print(Person.legs_num)

 类方法

定义:使用装饰器@classmethod第一个参数必须是当前类对象,该参数名一般约定为cls其余参数再cls后面用 ,逗号隔开。通过它来传递类的属性和方法(不能传实例的属性和方法);

调用:类对象或实例对象都可以调用。

class Student:

    cls_number = 68 # 类属性

    @classmethod  # 装饰器
    def add_cls_number(cls):
        cls.cls_number+=1
        print(cls.cls_number)

Student.add_cls_number() # 直接调用类方法