欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

黑马python基础班---day06

程序员文章站 2022-03-04 09:27:14
#:面向对象# 类名:使用大驼峰命名法# 1:定义一个基本类class People(object): def sing(self): print("唱歌")p1 = People()#为对象添加属性p1.name = "张三"p1.age = 23#获取对象的属性print("姓名:", p1.name)# 输出结果:姓名: 张三# 2: 在方法内部通过self属性获取对象的属性:self保存的是对象的地址class People(object)...
#:面向对象
# 类名:使用大驼峰命名法

# 1:定义一个基本类
class People(object):
    def sing(self):
        print("唱歌")

p1 = People()

#为对象添加属性
p1.name = "张三"
p1.age = 23

#获取对象的属性
print("姓名:", p1.name)
# 输出结果:姓名: 张三


# 2: 在方法内部通过self属性获取对象的属性:self保存的是对象的地址
class People(object):
    def show_info(self):
        print("姓名:", self.name, "年龄:", self.age)

p1 = People()
p1.name = "任善文"
p1.age = 23
p1.show_info()

# 3:__init__ 方法进行初始化:
class People(object):
    def __init__(self):
        self.name = "任善文"
        self.age = 23
    def show_info(self):
        print("姓名:", self.name, "年龄:", self.age)

p1 = People()
p1.show_info()

# 4: 自带的__init__方法为数据动态的赋值

class People(object):
    def __init__(self, new_name, new_age):
        self.name = new_name
        self.age = new_age
    def show_info(self):
        print("姓名:", self.name, "年龄:", self.age)

p1 = People("任善文", 23)
p1.show_info()

# 5: 以关键字的方式进行传参
p1 = People(new_name="哎呦呦", new_age= 23)
p1.show_info()

# 6:以字典的方式进行传参
my_dict = {"new_name": "任善文", "new_age": 23}
p1 = People(**my_dict)
p1.show_info()

# 7:__str__方法:当使用print函数输出对象时,自动调用该方法,并且以字符串的方法访问对象描述的信息。
class Person(object):
    def __init__(self, new_name, new_age):
        self.name = new_name
        self.age = new_age

    def __str__(self):
        return "姓名:%s 年龄:%d" % (self.name, self.age)

p1 = Person("任善文", 25)
print(p1)
# 输出结果为:姓名:任善文 年龄:25

# 8 :__del__方法:对象销毁的时候会调用__del__方法:
# 对象销毁的方法:1:程序退出的时候   2:内存中的数据对象没有变量使用时
class Person(object):
    def __init__(self, new_name, new_age):
        self.name = new_name
        self.age = new_age

    def __str__(self):
        return "姓名:%s 年龄:%d" % (self.name, self.age)

    def __del__(self):
        print("对象被销毁了!!!!!!", self.name)

p1 = Person("李四", 55)
# 此时调用__del__方法
print(p1)
del p1
print("over!!!")



# 1:继承:子类使用父类中的属性和方法

class Animal(object):
    def __init__(self):
        self.name = "动物类"
    def eat(self):
        print("动物在吃草!!!")

class Dog (Animal):
    pass

dog = Dog()

#子类继承父类的属性
print(dog.name)
#子类可以继承父类的方法
dog.eat()


# 2:多继承
class A(object):
    def __init__(self, new_name, new_age):
        self_name = new_name
        self_age = new_age
    def show_a(self):
        print("我是AAAAA")

class B(object):
    def __init__(self, new_name, new_age):
        self_name = new_name
        self_age = new_age
    def show_a(self):
        print("我是BBBBB")

class C(A, B):
    def __init__(self, new_name, new_age):
        self_name = new_name
        self_age = new_age

# 使用类名查看继承顺序:返回的一个是元组类型,一个是列表类型
print(C.__mro__)
#输出结果是:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
print(C.mro())
#输出结果是:[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]

# 加入继承多个类,且父类有相同的方法则,会用括号前面的方法。
c1 = C(A, B)
c1.show_a()
# 因为A靠前所以输出结果是:我是AAAAA


# 3: 子类重写父类的方法:
class Person(object):
    def work(self):
        print("正在工作........")

class Student(Person):
    def work(self):
        print("正在学习........")

student = Student()
student.work()
#子类覆盖父类的方法:输出结果是:正在学习........


# 4:子类调用父类的三种方法:
# 第一种:当子类和父类没有同名方法的时候可以使用self.
# 第二种:使用类名
# 第三种:使用super关键字

class Person(object):
    def sleep(self):
        print("正在睡觉......")

class Student(Person):
    def work(self):
        self.sleep()

# 使用self调用
student1 = Student()
student1.work()


# 第二种:使用类名
class Student(Person):
    def work(self):
        #如果使用类名调用那么括号里的self必不可少。
        Person.sleep(self)

student2 = Student()
student2.work()

# 第三种:使用super关键字
class Student(Person):
    def work(self):
        #如果使用类名调用那么括号里的self必不可少。
        super().sleep()

student3 = Student()
student3.work()


# 5:私有属性和私有方法
# 在属性或方法前面加__:只能在当前类中使用,子类,父类,其他类均无法使用。
# 扩展: 私有属性和私有方法在python中没有做到绝对的私有,只是对名字进行了伪装。
# 伪装: 私有属性 __age  伪装后: _类名__age     私有方法:__money  伪装后 _类名__money

class Person(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

p1 = Person("李四", 20)
#将对象的所有信息打包成字典
result = p1.__dict__
print(result)


# 6: 修改私有属性错误的方法:
print("修改前:", p1.__dict__)
#修改前: {'name': '李四', 'age': 20}
p1.__age = 28
print(p1.__age)
print("修改后:", p1.__dict__)
#修改后: {'name': '李四', 'age': 20, '__age': 28},发现实际上是增加一个属性,而不是修改属性。



# 如何修改?在原来类中创建一个修改私有属性的公有方法
class Person(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    def set_age(self, new_age):
        self.__age = new_age

p1 = Person("李四", 20)
#将对象的所有信息打包成字典
result = p1.__dict__
print(result)
print("----------")

#非常规方法获取私有变量
print(p1._Person__age)
print(p1._Person__name)
# 输出结果:
# 20
# 李四

p1.set_age(25)
print(p1.__dict__)

# 输出结果:
# {'_Person__name': '李四', '_Person__age': 20}
# {'_Person__name': '李四', '_Person__age': 25}


# 7:同理:如果想在外部访问私有属性,可以先建一个公有方法:
class Person(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    def get_age(self):
        return self.__age

p = Person("任善文", 24)
age = p.get_age()
print(age)



本文地址:https://blog.csdn.net/qq_41341757/article/details/107288947