黑马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
上一篇: Python实习第五天代码
下一篇: 粗读《Python 深度学习》(2)
推荐阅读
-
黑马python基础班---day06
-
python_0基础开始_day06
-
Python集训营45天—Day06 (面向对象编程基础)
-
黑马程序员IDEA版JAVA基础班\JavaWeb部分视频\2-10Request和Response\第5节 request登录案例
-
学习python基础班结束test:凯撒加密法,利用字母移位来加密字母。现在要求实现这样的一个加密和解密的类
-
我的零基础Python系统培训班学习大纲路线图!
-
2019黑马安卓ANDROID入门基础就业班无加密最新
-
python_0基础开始_day06
-
Python集训营45天—Day06 (面向对象编程基础)
-
黑马程序员IDEA版JAVA基础班\JavaWeb部分视频\2-10Request和Response\第5节 request登录案例