当前位置: 移动技术网 > IT编程>脚本编程>Python > 黑马python基础班---day06

黑马python基础班---day06

2020年07月12日  | 移动技术网IT编程  | 我要评论
#:面向对象
# 类名:使用大驼峰命名法

# 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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网