python-类

1.类

1.1. 创建和使用类

注意:

  • python默认方法:_方法名_,创建新实例时,会自动运行此方法

  • 在python默认方法中,要在其他形参的前面加入self。通过实参传递时,会自动传递self,所以我们不需要传递它。self是一个指向实例本身的引用。

  • 定义其他方法时,可加入形参self访问属性

  • 属性指能够被实例访问的变量

  • 通常首字母大写:类;小写:实例

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

    def sayHello(self):
        print("Hello, " + self.title() + " !")

1.2. 根据类创建实例

  • 在默认方法中,不需要return语句,python会自动返回实例

  • 使用句点表示法来访问实例的属性

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

    def sayHello(self):
        print('Hello, ' + self.name.title() + ' !')

person1 = Person('tom', 25)
person1.sayHello()
print(person1.name.title() + " is " + str(person1.age) + " years old.")
# Hello, Tom !
# Tom is 25 years old.

person2 = Person('carl', 18)
person2.sayHello()
print(person2.name.title() + " is " + str(person2.age) + " years old.")
# Hello, Carl !
# Carl is 18 years old.

1.3. 使用类和实例

class Animal():
    def __init__(self, type, age):
        self.type = type
        self.age = age

    def describe(self):
        des = self.type.title() + " is " + str(self.age) + " years old."
        return des

animal1 = Animal('dog', 5)
print(animal1.describe())
# Dog is 5 years old.

1.3.1 给属性指定默认值

注意:可以不用包含为属性提供初值的形参

class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.need = 'eat'

    def need_fun(self):
        print(self.name.title() + " need to " + self.need + " !")

person1 = Person('tom', 18)
person1.need_fun()
# Tom need to eat !

1.3.2 修改属性的值

  • 直接修改属性的值

class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.need = 'eat'

    def need_fun(self):
        print(self.name.title() + " need to " + self.need + " !")


person1 = Person('tom', 18)
person1.need = 'sleep'
person1.need_fun()
# Tom need to sleep !
  • 通过方法修改属性的值

class Person():
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
        self.age = 0

    def update_age(self, new_age):
        if new_age > self.age:
            self.age = new_age
        else:
            print("You can't update the age!")

    def read_age(self):
        print(self.name.title() + " is " + str(self.age) + " years old!")

person1 = Person('tom', 'male')
person1.update_age(12)
person1.read_age()
# Tom is 12 years old!
  • 通过方法对属性的值进行递增

class Person():
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
        self.age = 0

    def update_age(self, new_age):
        if new_age > self.age:
            self.age = new_age
        else:
            print("You can't update the age!")

    def increment_age(self, increase):
        if increase <= 0:
            print("Error")
        else:
            self.age += increase

    def read_age(self):
        print(self.name.title() + " is " + str(self.age) + " years old!")

person1 = Person('tom', 'male')
person1.update_age(10)
person1.read_age()
person1.increment_age(14)
person1.read_age()
# Tom is 12 years old!
# Tom is 24 years old!

2. 继承

2.1. 子类的方法__init__()

注意:

  • 创建子类时,父类必须包含在当前文件中,并且位于子类的前面

  • 定义子类时,要在括号内指定父类的名称

  • 函数super,可以将父类和子类关联起来,使用方法:super().__init__(属性1,属性2,...)

class Person():
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def des(self):
        print(self.name.title() + " : " + self.gender)

class Student(Person):
    def __init__(self, name, gender):
        super().__init__(name, gender)

stu1 = Student('tom', 'male')
stu1.des()
# Tom : male

2.2. 给子类定义属性和方法

class Person():
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def des(self):
        print(self.name.title() + " : " + self.gender)

class Student(Person):
    def __init__(self, name, gender):
        super().__init__(name, gender)
        self.task = 'study'

    def doing(self):
        print(self.name.title() + " : " + self.task)

stu1 = Student('tom', 'male')
stu1.doing()
# Tom : study

2.3. 重写父类的方法

注意:将要重写的父类方法名,在子类中要同名

class Animal():
    def __init__(self, type, name):
        self.type = type
        self.name = name

    def task(self):
        print(self.name.title())

class Dog(Animal):
    def __init__(self, type, name):
        super().__init__(type, name)
        self.job = 'run'

    def task(self):
        print(self.name.title() + " is a " + self.type + ": " + self.job)

dog = Dog('dog', 'tom')
dog.task()
# Tom is a dog: run

2.4. 将实例用作属性

注意:将一部分内容放入新类中,然后再将这个新类的实例作为原实例的属性

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

class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.task = Task()

class Task():
    def __init__(self, task="study"):
        self.task = task

    def des(self):
        print(self.task)

stu = Student('tom', 16)
print(stu.name + ": ")
stu.task.des()
# tom: 
# study

3. 导入类

3.1. 导入单个类

person.py :

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

    def des(self):
        print(self.name.title() + ":" + str(self.age))

user.py :

from person import Person

user = Person('tom', 19)
user.des()
# Tom:19

3.2. 在一个模块中存储多个类

person.py :

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

    def des(self):
        print(self.name.title() + ":" + str(self.age))

class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.job = "study"
        self.study = Study()

class Study():
    def __init__(self, course="English"):
        self.course = course

    def study_fun(self):
        print("learn " + self.course)

user.py :

from person import Student

stu = Student("tom", 20)
stu.des()
print(stu.job)
stu.study.study_fun()
# Tom:20
# study
# learn English

3.3. 从一个模块中导入多个类

person.py :

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

    def des(self):
        print(self.name.title() + ":" + str(self.age))

class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.job = "study"

    def des(self):
        print(self.name.title() + ":" + self.job)

user.py :

from person import Person, Student

person = Person("tom", 18)
person.des()
stu = Student("jack", 20)
stu.des()
# Tom:18
# Jack:study

3.4. 导入整个模块

注意:模块名.类名

person.py :

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

    def des(self):
        print(self.name.title() + ":" + str(self.age))

class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.job = "study"

    def des(self):
        print(self.name.title() + ":" + self.job)

user.py :

import person

user1 = person.Person("tom", 20)
user1.des()
user2 = person.Student("jack", 15)
user2.des()
# Tom:20
# Jack:study

3.5. 导入模块中的所有类

注意:

  • from 模块名 import *

  • 不推荐这种方法,因为导入的类名可能会与文件中的类名重合

from person import *

user1 = Person("tom", 20)
user1.des()
user2 = Student("jack", 15)
user2.des()
# Tom:20
# Jack:study

3.6. 在一个模块中导入另一个模块

person.py :

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

    def des(self):
        print(self.name.title() + ":" + str(self.age))

student.py :

from person import Person

class Student(Person):
    def __init__(self, name, age):
        super().__init__(name, age)
        self.job = "study"

    def des(self):
        print(self.name.title() + ":" + self.job)

user.py :

from person import Person
from student import Student

user1 = Person("tom", 20)
user1.des()
user2 = Student("jack", 15)
user2.des()
# Tom:20
# Jack:study

4. Python标准库

注意:我们可以使用标准库中的任何函数和类

4.1. 使用模块collections中的一个类:OrderedDict,可以记录添加键-值对的顺序

from collections import OrderedDict

user = OrderedDict()
user['tom'] = 13
user['jack'] = 15
user['ann'] = 18
for name, age in user.items():
    print(name.title() + ":" + str(age))
# Tom:13
# Jack:15
# Ann:18

4.2. 使用模块random中的randint函数

from random import randint

print(randint(1, 5))  # 2

4.2.1 掷骰子

from random import randint

class Die():
    def roll_die(self, sides=6):
        print(randint(1, sides))

p1 = Die()
p1.roll_die(10)  # 9

5. 类编码风格

  • 类名采用驼峰命名法,即类中每个单词首字母大写(大驼峰法)不适用下划线,模块名与实例名都采用小写的格式,在单词间加上下划线

  • 每个类,都需要包含一个文档字符串,如:"""文档说明"""

  • 同时导入标准库中模块与自己编写的模块时,先导入标准模块中所需的内容,再导入自己模块中的内容

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值