九江商城网站建设,网络架构动态,个人网页怎么做,哪个网站做汽车分期主要分享一下自己在学习python中关于类和实例的基本概念以及用法#xff0c;因为在写自动化测试用例的时候会使用类跟方法进行封装#xff0c;使代码更加的简洁干净#xff0c;以下是自己的一些学习心得
1.类跟实例的基础概念 类#xff1a;是抽象的模板#xff0c;比如动…主要分享一下自己在学习python中关于类和实例的基本概念以及用法因为在写自动化测试用例的时候会使用类跟方法进行封装使代码更加的简洁干净以下是自己的一些学习心得
1.类跟实例的基础概念 类是抽象的模板比如动物类 定义类的语法class 后面紧接着是类名即Animals类名通常是大写开头的单词紧接着是(object)表示该类是从哪个类继承下来的通常如果没有合适的继承类就使用object类这是所有类最终都会继承的类。object继承的类也可以不写 #写法1
class Animals(object)pass
#写法2
class Animals1()pass 实例是根据类创建出来的一个个具体的对象比如从动物类创建的“狮子” 实例的语法通过类型实现 #第一步先定义类
class Animals():pass
#第二步实例化一个对象dog
dogAnimals()
#可以给实例绑定属行比如dog会叫汪汪汪
dog.say汪汪汪
print(dog.say) #汪汪汪2.类变量和实例变量 类变量就是该类所有实例共享的属性和方法也叫类属性所有由此类实例化的对象都有此属性并且不能修改比如定义一个动物类他们都属于大自然不管实例化成的狮子老虎。兔子他们都有一个共同的属性都属于大自然类属性的一个常见用途是存储与类相关的常量或共享的状态信息。例如可以在类属性中存储数据库连接信息、默认配置或类的共享状态。 #共有类属性
class Animals():from大自然pass
#实例化一个dog
dogAnimals()
print(dog.from) #大自然
#实例化一个cat
catAnimals()
print(cat.from) #大自然 拓展 针对类可以定义一些私有属性两个下划线开头的属性是私有的private。其他为公共的public类内部可以直接访问私有属性类的外部不能直接访问私有属性类外部可以通过”_类名__私有属性名“ 访问私有属性 #定义一个动物类
class Animals():from_1大自然 #类属性不管多少个实例这个不会变化__ownerchy #类的私有属性主人是chydef __init__(self,say):self.saysay #实例属性不同实例有不同的值self.ownerself.__owner #类的内部直接调用类的私有属性
#实例化一个dog
dogAnimals(汪汪汪)
print(dog.from_1)
print(dog.say)
print(dog.owner)
print(Animals._Animals__owner) #类的外部调用私有属性类名._类名__私有属性 实例变量每个实例独有的属性也叫实例属性这种定位位实例变量比如定义一个动物类每个动物都有叫声但是叫声都不同这个是属于不同实例的独有属性就要定义为实例属性定义实例属性一般使用 __init__ 方法此方法第一个参数永远是 self表示创建的实例本身因此在 __init__ 方法内部就可以把各种属性绑定到 self因为 self 就指向创建的实例本身。 #定义一个动物类
class Animals():from_1大自然 #类属性不管多少个实例这个不会变化def __init__(self,say):self.saysay #实例属性不同实例有不同的值
#实例化一个dog
dogAnimals(汪汪汪)
print(dog.from_1)
print(dog.say)
#实例化一个cat
catAnimals(喵喵喵)
print(cat.from_1)
print(cat.say)拓展针对实例属性可以定义一些私有的实例属性这些私有属性的定义是在前面加两个下划线私有属性可以在类中调用如果在类外部被调用通过 ”_类名__私有属性名“ 访问私有属性 #定义一个动物类
class Animals():from_1大自然 #类属性不管多少个实例这个不会变化def __init__(self,say,age):self.saysay #实例属性不同实例有不同的值self.__ageage #定义的私有实例属性def __test(self):print(self.__age) #类的内部调用私有的实例属性
#实例化一个dog
dogAnimals(汪汪汪,18)
print(dog._Animals__age) #类的尾部调用私有的实例属性 3.类属性绑定/实例属性绑定 在定义类时通常我们说的定义属性其实是分为两个方面的类属性绑定、实例属性绑定用绑定这个词更加确切不管是类对象还是实例对象属性都是依托对象而存在的。我们说的属性绑定首先需要一个可变对象才能执行绑定操作使用objname.attr attr_value的方式为对象objname绑定属性attr属性的绑定发生在两个地方类定义时候运行是任意阶段 这分两种情况
若属性attr已经存在绑定操作会将属性名指向新的对象
class Animals1():from_1 大自然 # 类属性from_1的属性已经存在def __init__(self):self.say汪汪汪#实例属性已经存在Animals1.from_1 动物园 # 类属性修改成一个新的属性此时from_1的属性会指向新的对象
dog1Animals1()
dog1.say喵喵喵#实例属性修改成一个新的属性
print(Animals1.from_1) # 动物园
print(dog1.say)#喵喵喵
若不存在则为该对象添加新的属性后面就可以引用新增属性
class Animals2():# 没有任何的属性def __init__(self,say):self.saysay
Animals2.from_1 动物园1 # 新增一个类属性
print(Animals2.from_1) # 动物园1
dog2Animals2(汪汪汪)
dog2.namejim #新增一个实例属性
print(dog2.name)#jim
4.类属性引用/实例属性引用 4.1 类属性的引用 类属性的引用分为两种数据属性函数属性 数据属性的引用 class Animals():from_1动物园
print(Animals.from_1) #数据属性的引用 函数属性的引用 class Animals():jiao汪汪汪def say()print(Animals.jiao)
Animals.say() #函数属性的引用 4.2 实例属性的引用 总是先到实例对象中查找属性再到类属性中查找属性如果实例属性跟类属性都有的时候优先实例属性如果实例属性中没有的时候再去找类属性 class Animals():from_1大自然 #类属性中有此age3def __init__(self,say,from_1):self.saysayself.from_1from_1 #实例属性中有此
#实例化一个具体的动物狗
dogAnimals(汪汪汪,d动物园)
print(dog.from_1) #动物园 类属性跟实例属性都有此优先实例属性所以打印出来的是动物园
print(dog.age) #3,只有类属性中有此所以值输出类属性中的值 属性绑定语句总是为实例对象创建新属性属性存在时更新属性指向的对象如果类属性中有某一个属性但是实例属性中没有此属性 使用实例绑定一个类中的属性此时实例中增加一个实例属性类属性中不变。 class Animals():from_1大自然def __init__(self,say):self.saysay
#实例化一个动物狗
dogAnimals()
dog.from_1动物园 #给实例新增了一个属性
print(dog.from_1) #动物园
print(Animals.from_1) #大自然不会更新类属性 5.类方法/实例方法 类方法classmethod 装饰器定义的方法用于操作类级别的属性。它必须包含一个 cls 参数该参数代表类本身,可以通过类名或实例调用类方法。
class Animals:from_1大自然classmethod #装饰器定义下面的方法是一个类方法def class_method(cls):print(This is a class method)print(cls.from_1)
#调用方法
Animals.class_method实例方法用于操作实例的属性。它必须包含一个 self 参数该参数代表类的实例。通过实例调用实例方法会自动传入实例参数。
class MyClass:def instance_method(self):print(This is an instance method)# 创建实例
obj MyClass()# 调用实例方法
obj.instance_method()
静态方法是使用 staticmethod 装饰器定义的方法它与类和实例无关。静态方法不接受特殊的第一个参数self 或 cls因此无法直接访问实例变量或类变量。
class MyClass:staticmethoddef static_method():print(This is a static method)# 调用静态方法
MyClass.static_method()