目录
对象
实例对象的属性
对象方法(实例方法)
类对象和属性
类方法
类与实例对象
(类与对象具有相同的方法和属性)类中可同时定义类方法与对象方法:区别在于第一个参数值
必须牢记类是抽象的模板,比如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=18p2.name="yuan"
p2.age=22print(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() # 直接调用类方法