Python-对象

1.类

类对象:
创建一个类,其实也是一个对象也在内存开辟了一块空间,称为类对象,类对象只有一个。
实例对象:
就是通过实例化类创建的对象,称为实例对象,实例对象可以有多个。

1.类属性:类外面,可以通过 实例对象.类属性类名.类属性 进行调用。类里面,通过 self.类属性类名.类属性 进行调用。
2.实例属性 :类外面,可以通过 实例对象.实例属性 调用。类里面,通过 self.实例属性 调用。
3.实例属性就相当于局部变量。出了这个类或者这个类的实例对象,就没有作用了。
4.类属性就相当于类里面的全局变量,可以和这个类的所有实例对象共享。
5.类方法修改类属性,实例方法修改实例属性,静态方法和他们都没有关联的时候使用,也就是不需要传参的时候使用。

class House:  # 声明类
    acreage = '100平方米'

    def setAcreage(self, a):
        self.acreage = a

    def getAcreage(self):
        print(self.acreage)


house = House()  # 创建对象

2.封装

信息隐蔽技术。隔绝绝体的实现方法,只对外提供必要的方法,安全,方便。

3.继承

子类自动继承、共享父类中的数据和方法

如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性。如果想覆盖父类方法,同时还要引用父类的方法,可以使用【super().方法名字】,进行调用父类中的方法

多重继承:class Child(Parent, Parent2)
继承多个没有父类的父类

class Parent:

    def __init__(self):
        self.name = "父类初始化名字"

    def getName(self):
        print(self.name)


class Child(Parent):

    def __init__(self):
        super().__init__()
        self.action = '踢球'

    def getAction(self):
        print(self.action)


p = Parent()
p.getName()

c = Child()
c.getName()
c.getAction()

class Parent2:
    def getName2(self):
        print("paren2")

class Child2(Parent, Parent2):
    pass

c2 = Child2()
c2.getName()
c2.getName2()

4.多态

不同对象对同一方法响应不同的行动

class A:
    def name(self, name):
        print("我是:" + name)


class B:
    def name(self, name):
        print("我是:" + name)


a = A()
b = B()
a.name('A')
b.name('B')

5.self

self是对于对象自身的引用
不加 self 的变量是局部变量,作用域是当前函数,无法在外部引用;
加了 self 的变量是实例变量,作用域是当前实例,可以在外部引用。

class House:  # 声明类

    def setAcreage(self, a):
        self.acreage = a  # self是对象本身,这里的作用是 对象声明了一个变量acreage,其作用域为整个对象,实例对象可以调取使用
        acreage2 = a
        print('我是局部变量:' + acreage2)

    def getAcreage(self):
        print(self.acreage)


house = House()  # 创建对象

house.setAcreage("200平方米")
print(house.acreage)  # acreage可以在外部引用
# print(house.acreage2)  # acreage2不可以在外部引用

house.getAcreage()

6.初始化函数

默认为空,可设置参数

class House:

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

    def getName(self):
        print(self.name)


house = House('哈哈')
house.getName()

7.公有私有

在变量前面加两个下划线,变量就是私有的,外部无法访问

class Person:
    __name = '哈哈'  # 在变量前面加两个下划线,变量就是私有的,外部无法访问

    def getName(self):
        return self.__name


p = Person()
print(p.getName())

8.一些相关的BIF

class A:
    pass


class B(A):
    pass


class C:
    x = '哈哈'

    def getX(self):
        return self.x

    def setX(self, x):
        self.x = x

    def delX(self):
        del self.x

    p = property(getX, setX, delX)  # 三个方法封装成一个属性,实例对象调用属性p可以分别使用三个方法


a = A()
c = C()

print(issubclass(B, A))  # B是否为A的子类
print(isinstance(a, A))  # a是否为A的实例对象
print(hasattr(C, 'x'))  # C中是否有x属性或方法
print(getattr(C, 'x', '您所访问的属性不存在'))  # 获取C中x的值

setattr(C, 'y', '呵呵')  # 在C中设置属性y的值为呵呵
print(c.y)

delattr(C, 'y')  # 删除属性y

print(c.p)
c.p = '厚厚'
print(c.p)
del c.p
print(c.x)

你可能感兴趣的:(Python-对象)