面向对象笔记

1.类的定义

 calss 类名:
     类体
在python中使用class关键字来定义类,定义类时需要注意以下几个事项:
(1)类代码块以class关键字开头,代表定义类。
(2)class之后是类名,这个名字由用户自己指定,命名规则一般是多个单词组成的名称,每个单词除了第一个字母大写之外,其余字母均为小写,class和类名中间要有空格。
(3)类名后加冒号,类体由缩进的语句块组成,定义在类体内的元素都是类的成员。类的成员分为两种类型:描述状态的数据成员(也称属性)和描述操作的函数成员(也称方法)。
(4)一个类通常包含一种特殊的方法:__init__()。这个方法被称为初始化方法,又称为构造方法,它在创建和初始化一个新对象时被调用,初始化方法通常被设计用于完成对象的初始化工作。方法的命名也是符合驼峰命名规则,但是方法的首字母小写。

2.创建类的对象

对象名=类名(参数列表)
3.添加和获取对象属性

1).在类的外部

添加:对象名.属性名=值

获取:对象名.属性名
创建对象后,我们对其中一个对象添加实例属性,其他对象不发生变化

class Person(object):
    def eat(self):
        print('早饭吃了油条和包子,血糖110')
p1 = Person()
p1.name = 'xiaoming'
print(p1.name)  
p2.age = 18
p1.name = 'xiaowang'
print(p1.name)
print(p1.__dict__)
del p1.name
print(p1.name)

2).在类的外部

添加:self.属性名 = 值
获取:self.属性名

class Person(object):
    def add_attr(self):
        self.name = 'xiaoming'
        self.age = 19
        self.gender = '女'
p1 = Person()
p1.add_attr()
print(p1.name, p1.age, p1.gender) 
p2 = Person()
p1.name = 'xiaobai'
print(p1.name)  # Rose

4.init方法

class testClass:
    def __init__(self, name, gender):
        self.Name = name
        self.Gender = gender  
        print('hello') 


t1 = testClass('aa', 'bb')
print(t1.Name)
print(t1.Gender)

5.私有方法和私有属性

在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法

class Women:
    # 定义属性和方法时,属性名或方法名前增加两个下划线__表示私有属性或私有方法
    def __init__(self, name):
        self.name = name  # 公有属性,外界可以直接访问
        self.__age = 19  # 私有属性,外界及其子类不能直接访问

    # 私有方法,外界不能直接访问
    def __secret(self):
        # 对象内部可以直接访问对象的私有属性
        print("%s 的年龄是 %d" % (self.name, self.__age))


xiaowang = Women("小王")
print(xiaowang._Women__age)
xiaowang._Women__secret()

6.继承

1)、子类继承父类的成员变量和成员方法
2)、子类不继承父类的构造方法,能够继承父类的析构方法
3)、子类不能删除父类的成员,但可以重定义父类成员
4)、子类可以增加自己的成员

class Person():

    def __init__(self, name, age, sex):
        self.name = "xiaowang"
        self.age = '19'
        self.sex = sex

    def talk(self):
        print("I want to talk with you!!")


class Chinese(Person):
    def __init__(self, name, age, sex, language):
        Person.__init__(self, name, age, sex)
        self.age = age
        self.language = "chinese"

    def talk(self):
        print("我说的是普通话!!")
        Person.talk(self)


obj = Chinese("xiaobai",'19','male',"普通话")

print(obj.name)
print(obj.age)
print(obj.language)
obj.talk()

7.多态

多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作

class Animal(object):
	def eat(self) :
		print('Animal eat something')
class Dog(Animal):
	def eat(self) :
		print('Dog eats meat')
class Cat(Animal):
		print('Cat eats fish')

animal = Animal()
dog = Dog()
cat = Cat()
animal.eat()
dog.eat()
cat.eat()

8.类方法

class Man:
    id = 0  # 类变量

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

    @classmethod
    def id_number(cls):
        cls.id += 1
        return cls.id


a = Man('A')
print(a.id)
b = Man('B')
print(b.id)

9.对象方法

在class中面向对象的方法,即默认参数为self的方法,该类方法只能被实例化的对象调用,类名不能调用

class Student:

    # 对象方法,只能被实例调用,不能被类调用
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 对象方法,只能被实例调用,不能被类调用
    def get_email(self):
        return self.name + str(self.age) +"@School.com"


stu1 = Student("xiaowang",19)       # 生成实例
print(stu1.get_email())         # 实例调用该方法
print(Student.get_email())      # 类名调用,会出错

10.静态方法

静态方法可以理解为普通的方法或函数,其没有默认参数,修饰器为@staticmethod.

class Student:
    
    def __init__(self, name, age):
        self.name = name
        self.age = age

    
    def get_email(self):
        return self.name + str(self.age) +"@School.com"

    @classmethod  
    def from_string(cls, stu_string):
        name, age = stu_string.split('-')
        return cls(name, age)

    @staticmethod
    def is_workday(day):
        if day.weekday() == 6 or day.weekday ==7:
            return False
        return True
from datetime import datetime
day = datetime(2022,5,24)
print(Student.is_workday(day))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值